名词
- RDD
- 弹性分布式数据集
- DAG
- 有向无环图
-
Application
- 每个 Spark 程序,称为一个 Application。
-
Driver
-
每个 Spark 程序 运行一个 Driver 进程;用来协调、统计任务进度。
*类似 JobTracker
-
-
Worker
-
每个 Spark 程序 运行多个 Worker 进程;运行在一个或多个节点上,包含多个 Executor 子进程。
*类似 TaskTracker
-
-
Executor
- 每个 Spark 程序 运行多个 Executor 进程;用来承担具体计算任务。
计算抽象
- Job
- 程序每次调用 Action,逻辑上生成一个 Job,一个 Job 包含多个 Stage。
- Stage
- 程序调用了需要 Shuffle 计算的 Operator,如 GroupByKey,则以 Shuffle 为边界分成:
- ShuffleMapStage
- ResultStage
- 程序调用了需要 Shuffle 计算的 Operator,如 GroupByKey,则以 Shuffle 为边界分成:
- TaskSet
- Stage 可以直接映射为 TaskSet,一个任务集 封装了一次需要运算的、具有相同处理逻辑的 Task;
- 这些 Task 可以并行运算;粗粒度的调度是以 TaskSet 为单位的。
- Task
- 物理节点上运行的基本单位;包含两类,分别对应 Stage 中的 ShuffleMapStage、ResultStage 中的执行基本单元
- ShuffleMapTask
- ResultTask
- 物理节点上运行的基本单位;包含两类,分别对应 Stage 中的 ShuffleMapStage、ResultStage 中的执行基本单元
运行模式
- Local
- 本地运行;单个进程,无并行计算能力;
- Local [K]
- 本地运行;K个进程;通常 K = 机器的CPU核心数;
- Local [*]
- 本地运行;工作进程数 = 机器的CPU核心数;
-
spark://host:port
- 以单机模式运行;Spark 的集群运行模式;默认端口:7077;
-
mesos://host:port
- Mesos 集群上运行;Driver 和 Worker 进程在 Mesos 集群上;
- Yarn-Client
- Yarn 集群上运行;Driver 进程在本地,Worker 进程在 Yarn 集群上;
- Yarn-Cluster
- Yarn 集群上运行;Driver 和 Worker 进程在 Yarn 集群上;
Shuffle
触发 Shuffle 的操作
操作 | 算子 |
---|---|
repartition | repartition、coalesce(重分区、合并) |
*ByKey | groupByKey、reduceByKey、combineByKey、aggregateByKey 等 |
join | cogroup、join |
- Spark Shuffle 算法
- hash
- sort
- tungsten-sort
持久化级别
- MEMORY_ONLY(默认持久化策略)
- 仅在内存中保存未序列化的对象格式;
- 如果内存不足,则数据可能不会进行持久化;
- 下次执行 RDD 的算子操作时,没有持久化的数据将重新计算。
- MEMORY_AND_DISK
- 保存未序列化的对象格式;
- 优先尝试保存数据到内存;内存不足。则写入磁盘文件;
- 下次执行 RDD 的算子操作时,读取磁盘中的持久化数据。
- MEMORY_ONLY_SER、MEMORY_AND_DISK_SER
- 将 RDD 中的数据进行序列化;
- RDD 的每个分区将被序列化为一个字节数组;
- 更节省内存,避免持久化数据过多占用内存,导致频繁 GC。
- DISK_ONLY
- 保存未序列化的对象格式;
- 数据全部写入磁盘文件。
- MEMORY_ONLY_2、MEMORY_AND_DISK_2 等等
- 将每个持久化数据,复制一份副本,保存到其他节点;
- 该机制主要用于容错。