spark运行的基本流程

💡 原文中文,约4300字,阅读约需11分钟。
📝

内容提要

本文总结了《Spark大数据处理:技术、应用与性能优化》一书中关于Spark运行流程的内容,介绍了Spark的核心组件和RDD Graph、Job、Stage和Task的概念及其在Spark中的作用,讨论了Stage的划分、Shuffle机制以及Stage和Task的调度方式。建议有兴趣的读者阅读原书了解更多内容。

🔎

延伸解读

宽窄依赖如何决定Stage边界

文章指出,Spark根据RDD之间的宽窄依赖关系划分Stage。窄依赖允许在单个节点上以流水线方式计算,不会引起网络数据混洗;而宽依赖则意味着父RDD的每个分区可能被多个子RDD分区使用,必须进行Shuffle。因此,遇到宽依赖时,Spark会在其前后分别创建新的Stage,将Shuffle作为Stage之间的边界。这种划分方式有助于提高任务调度和执行效率。

DAGScheduler与TaskScheduler的分工

Stage的调度由DAGScheduler负责,它根据RDD的有向无环图切分出Stage的DAG,并通过广度优先遍历确定执行顺序。DAGScheduler维护waitingStages、runningStages和failedStages等集合,以避免过早执行和重复提交。划分好的TaskSet会提交给TaskScheduler,后者通过TaskSetManager管理Task的执行、状态监控和失败重试,并决定Task在哪些Executor上运行。

Shuffle Write与Shuffle Fetch的过程

文章以Stage2、Stage3到Stage1为例,描述了Shuffle的两个阶段。首先,上游Stage的每个分区执行流水线式函数操作,最后进行Shuffle Write,将数据根据下一个Stage的分区数分成相应的Bucket并写入磁盘。然后,下游Stage从存储Shuffle数据的节点磁盘上Fetch所需数据,在本地进行用户定义的聚集函数操作,这个阶段称为Shuffle Fetch。通过这样一轮轮的Stage间Shuffle,完成数据的重新组合。

❓

Q&A

Spark的核心组件有哪些?

Spark的核心组件包括ClusterManager、Application、Driver、Worker和Executor。

什么是RDD Graph,它是如何形成的?

RDD Graph是通过一系列Transformation和Action操作形成的有向无环图,当RDD遇到Action算子时生成。

Spark中的Job是如何触发的?

Job是由Spark Action算子触发的作业,通过runJob方法向Spark提交。

Stage是如何划分的?

Stage根据RDD的宽窄依赖关系划分,宽依赖会引起shuffle,导致新的Stage的产生。

Spark的Shuffle机制有什么作用?

Shuffle机制用于在分布式环境中重新组合数据,以满足不同计算需求,尤其在宽依赖情况下。

DAGScheduler在Spark中负责什么?

DAGScheduler负责Stage的调度,将RDD的有向无环图切分为Stage的有向无环图,并管理其执行顺序。

🏷️

标签

➡️

继续阅读