具体流程 (以 standalone 模式为例)
任务调度
DAGScheduler
(1) 构建 Stage—碰到 shuffle 就 split
(2) 记录哪个 RDD 或者 Stage 输出被物化
(3) 重新提交 shuffle 输出丢失的 stage
(4) 将 Taskset 传给底层调度器
(5) 本地性策略 --- preferredLocations(p)
- 1.spark-cluster TaskScheduler
- 2.yarn-cluster YarnClusterScheduler
- 3.yarn-client YarnClientClusterScheduler
TaskScheduler
(1) 为每一个 TaskSet 构建一个 TaskSetManager 实例管理这个 TaskSet 的生命周期
(2) 数据本地性决定每个 Task 最佳位置 (process-local, node-local, rack-local and then and any
(3) 提交 taskset(一组 task) 到集群运行并监控
(4) 推测执行,碰到 straggle 任务放到别的节点上重试
(5) 出现 shuffle 输出 lost 要报告 fetch failed 错误
ScheduleBacked
(1) 实现与底层资源调度系统的交互 (YARN,mesos 等)
(2) 配合 TaskScheduler 实现具体任务执行所需的资源分配 (核心接口 receiveOffers)
来源: http://www.bubuko.com/infodetail-1994425.html