作者:吴款爷 | 来源:互联网 | 2023-07-11 15:19
Spark运行原理Spark运行原理构建应用程序运行时首先根据应用程序资源需求构建一个运行时环境,通过与资源管理器交互来完成,通常存在两种方式:粗粒度,应用程序在提交之后,正式运行
Spark运行原理
Spark运行原理
构建应用程序运行时
首先根据应用程序资源需求构建一个运行时环境,通过与资源管理器交互来完成,通常存在两种方式:
粗粒度,应用程序在提交之后,正式运行之前根据程序资源需求一次性获取资源,整个运行过程不再申请新的资源
细粒度,应用程序在提交之后,动态向集群申请资源,只要等资源满足一个任务的运行就开始执行,基于Hadoop的MR就是基于细粒度运行时构建
对于Spark on YARN,目前支持粗力度
应用程序转换成DAG
根据宽依赖和窄依赖拆分Stage,将应用程序转换成DAG
首先,从数据混洗的角度,窄依赖RDD可以通过相同键进行联合分区,整个操作可以在同一个节点上流水线式运行,不会造成网络间数据传输
其次,从失败恢复的角度,窄依赖的失败只需要重新计算丢失的RDD的父分区,并且可以在不同节点并行计算。宽依赖会设计多个父RDD分区的重新计算
首先将DAG划分成一个完整的Stage,从最后一个RDD往前回溯,不断判断RDD的依赖关系,如果是窄依赖则继续回溯,宽依赖则划分出一个新的Stage
调度执行DAG
DAGScheduler按照依赖关系调度执行每个Stage,优先选择不依赖任何阶段的Stage。执行Stage阶段启动一定数目的Task并行执行
Spark的优化机制(借鉴MapReduce)
数据本地性,对任务进行调度时,为算子选择节点,优先选择数据所在节点,其次选择数据所在机架节点,最后选择其他机架节点。
推测执行,检查到同类任务存在明显比较慢的任务时,尝试为慢任务启动备份任务,先完成的结果作为最终结果。
多线程执行具体的任务,减少多进程任务的启动开销
Executor上有一个BlockManager存储模块,当需要多轮迭代时,将中间过程的数据进行存储,后续需要时直接读取存储数据。