spark源码系列文章------shuffle模块详解

一、Basic shuffle writer实现解析

在Executor上执行shuffle Map Task时,最终会调用shuffleMapTask的runTask,核心逻辑如下:

1.从sparkEnv中获得shuffleManager;

2.从manager中获得writer

3.调用RDD开始计算,运算结果通过writer进行持久化,持久化之前通过Aggregator来确定是否需要进行Map端聚合,然后将结果通过FileShuffleManager#forMapTask的方法写入,写入完成后,会将元数据信息写入MapStatus,然后下游的Task可以通过这个MapStatus取得需要处理的数据。

这样writer通过ShuffleDependency#partitioner来获得下游partition的数量,下游的每个partition都会对应一个文件,文件名字的格式为:“shuffle_”+shuffledId+"_"+mapId+"_"+reduceId。

由于每个shuffle Map Task需要为每个下游的Task创建一个单独的文件,因此文件的数量就是number(shuffle_map_task)*number(following_task)。这样会导致创建和打开许多文件。

后来spark又引入Shuffle Consolidate Writer,原理是core上的第一个Task创建一个文件,该core上的后面的Task的shuffle操作都追加写入改文件,这样文件数量number(core)*number(following_task)  。

//todo



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值