什么时候需要 shuffle writer
假如我们有个 spark job 依赖关系如下
我们抽象出来其中的rdd和依赖关系:
E <-------n------, C <–n—D---n-----F–s—, A <-------s------ B <–n----`-- G
对应的划分后的RDD结构为:
最终我们得到了整个执行过程:
中间就涉及到shuffle 过程,前一个stage 的 ShuffleMapTask 进行 shuffle write, 把数据存储在 blockManager 上面, 并且把数据位置元信息上报到 driver 的 mapOutTrack 组件中, 下一个 stage 根据数据位置元信息, 进行 shuffle read, 拉取上个stage 的输出数据。
这篇文章讲述的就是其中的 shuffle write 过程。