Spark 执行流程

2018-12-21  本文已影响0人  Aderlabo

今天做的一个梦,梦回大一结束,回高中复读高三,一年下来不思进取做题也是飘的,甚至看不懂题说的意思。高考后,没有上本科分数线,专科是不会去读的。决定继续补习,闲暇时,会有点后悔放弃了985学历回来复读,最后如此结局。梦醒06:38

关键角色

关键流程

  1. client 提交 submit application

  2. 执行 main 函数

    运行的进程是 Driver,此进程在创建 SparkContext 时会创建 DAGScheduler,创建 TaskScheduler

  3. 执行ing,遇到 Transform 则记录,直到遇到 Action。

    调度 SparkContext.runjob 生成一个新的 job
    经过一系列调度,调度到 DAGScheduler.handleJobSubmitted(...) 生成 ResultStage(当前 job 的 FinalStage,这一过程遍历获得该 Stage 的所有父 Stage,遇到 ShuffleMapStage 则递归调用 new ShuffleMapStage() 在内部继续遍历父 Stage,直到没有父 Stage,生成 StageId 从左到右从大到小,这一过程生成了 DAG),创建成功则提交这个 Stage,在 SubmitStage 中,递归调用SubmitStage,先提交 ParentStage 最后提交自己。

    补充 lineage 机制: each RDD remembers how it was built from other datasets (by transformations like map, join or groupBy) to rebuild itself.

  4. 每个 Stage 生成一组 Tasks,TaskScheduler 调用 SubmitTasks 提交 TaskSet(Tasks),在 SubmitTasks(TaskSet) 内部由 SchedulerBackend 完成 Tasks 申请并把 Tasks 分配给 executor。由 TaskScheduler 完成 tasks 和 executor 的资源分配,executor 执行真正的计算任务。

上一篇 下一篇

猜你喜欢

热点阅读