1. 概述
之前从DAGScheduler
的过程中可以看出, 整个shuffle过程是在parent stage完成, child stage开始的时候进行的. 如果让我们来设计一个shuffle过程, 它起码包含以下几个问题:
- 如何记录上一步的数据在什么地方
- child executor如何从parent那里拉取数据
- 拉取失败了怎么办(DAGScheduler会重算的逻辑)
- 数据转移过程的性能如何保证
其中
数据转移
也就是shuffle, 15年的时候有幸跟随中科院自动化所参观当时的美的在佛山的现代化生产线. 非常惊讶于它的流水线是由计算机控制的, 整个调度过程的算法非常类似于spark. 面对的核心问题, 就是如何把初级流水线上的产品, 比如标准化的纸箱, 流入到下游的多个封装流水线上去. 实现动态化控制, 实现反向的生产速度控制等等.
2. 组件
从DAGScheduelr上也可以看到, MapOutputTrackerMaster
是DAG用来各种shuffle的一个重要的部分, 其后MapOutput
跟踪的数据来自于MapStage
里的MapTask
, 继而其中使用shuffleManager
来让数据刷到该刷的位置.
后边会重点理解MapOutputTracker
和ShuffleManager