1、ShuffleManager管理接口

在spark2.x版本中ShuffleManager的实现类只剩下SortShuffleManager。
2、SortShuffleManager实现类

接下来,看看shuffle注册器的实现:

红框中标出的是Shuffle处理器。
找到顶级的ShuffleHandle抽象类:

直接的实现类则为BaseShuffleHandle:

BaseShuffleHandle有两个子类:SerializedShuffleHandle 和 BypassMergeSortShuffleHandle;

可以看出这些Handle类中没有任何方法,只作为一个类型标注。实际相关的shuffle实现,是通过getReader和getWriter时在reader、writer实现。
getReader方法:构造了BlockStoreShuffleReader类对象

getWriter方法:根据ShuffleHandle的不同返回不同的Writer。

接下来看看其他方法:
unregisterShuffle:注销shuffle方法,会移除shuffleId记录和对应的数据文件


stop方法:无多大意义,调用IndexShuffleBlockResolver的stop方法,IndexShuffleBlockResolver的stop方法为空方法。

3、registerShuffle的调用
Dependency实际是在RDD中生成,不同的RDD算子,会构造不同的RDD。
RDD中map方法:

RDD的依赖获取:

ShuffledRDD的依赖获取:

ShuffleDependency的构建则会触发ShuffleHandle的注册:

从上图红框可以看出,Rdd依赖生成过程中,会注册ShuffleHanle,numMaps默认采用分区数。
本文分析了Spark2.x中ShuffleManager的实现,主要关注SortShuffleManager类。详细探讨了ShuffleHandle的注册过程,包括BaseShuffleHandle及其子类,以及如何通过getReader和getWriter方法实现shuffle操作。同时,解释了unregisterShuffle和stop方法的功能,并指出ShuffleDependency的构建会触发ShuffleHandle的注册。

4321

被折叠的 条评论
为什么被折叠?



