Spark shuffle 种类和shuffleManager源码分析

本文分析了Spark2.x中ShuffleManager的实现,主要关注SortShuffleManager类。详细探讨了ShuffleHandle的注册过程,包括BaseShuffleHandle及其子类,以及如何通过getReader和getWriter方法实现shuffle操作。同时,解释了unregisterShuffle和stop方法的功能,并指出ShuffleDependency的构建会触发ShuffleHandle的注册。
摘要由CSDN通过智能技术生成

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默认采用分区数。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

long-king

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值