《Spark知识梳理》 一、Spark基本概念

前言

《Spark 知识梳理》系列文章主要是通过阅读《Spark内核设计的艺术》书籍,整理的一些个人笔记。

Spark 特点

减少磁盘IO

Spark 将 map 端中间结果存在内存中。

增加并行度

对 Job 划分成多个 Stage,有些 Stage 可以并行执行,增加并行度。

避免重复计算

任务失败重新调度时,会过滤掉执行成功的分区任务。

可选的 Shuffle 排序

Spark 可根据不同场景选择在 map 端或是 reduce 端进行 Shuffle 排序

灵活的内存管理

Spark 将内存分为,堆上存储内存、堆外存储内存、堆上执行内存和堆外执行内存,并且提供了存储内存和执行内存之间动态占用空闲区域。

检查点

启用检查点会保存 RDD 计算的结果,失败重建时不需要重新计算 RDD。

Spark 基础知识

RDD

RDD(Resilient Distributed Dataset),弹性分布式数据集。

DAG

DAG(Directed Acycle Graph),有向无环图。反应 RDD 之间的依赖。

Partition

一个 RDD 可以划分成多个 Partition,Spark 根据 Partition 的数量确定 Task 的数量。

NarrowDependency

NarrowDependency(窄依赖),子 RDD 依赖于父 RDD 固定的 Partition。分为 OneToOneDependency 和 RangeDependency。

ShuffleDependency

ShuffleDependency(宽依赖),子 RDD 对父 RDD 中所有的 Partition 都有可能产生依赖,具体依赖取决于分区计算器(Partitioner)的算法。

Job

用户提交的作业。

Stage

Job 执行阶段。DAGScheduler 按照 ShuffleDependency 作为 Stage 划分节点对 RDD 的 DAG 进行 Stage 划分(上游 Stage 作为 ShuffleMapStage)。Stage 分为 ShuffleMapStage 和 ResultStage。

Task

具体执行的任务。一个 Job 在每个 Stage 都会按照 RDD 的 Partition 数量创建 Task。Task 分为 ShuffleMapTask(类似 map) 和 ResultTask(类似 reduce)。

Shuffle

Shuffle 是 map 任务输出到 reduce 任务输入的中间处理过程。将 map 任务的输出按照指定的分区策略(如,按 key 的 hash 值)分配给某个分区的 reduce 任务。