源码解析Spark各个ShuffleWriter的实现机制(二)——BypassMergeSortShuffleWriter

基于3.2版本分支。

BypassMergeSortShuffleWriter

简化流程图

Spark BypassMergeSortShuffleWriter流程图

示例

也就是说每个ShuffleMapTask都会对应着一个FileSegment,每个FileSegment可视作一个临时文件,接着这些FileSegment中对应的文件又会合并到一份DataFile中,通过IndexFile记录每个分区在DataFile中的起始偏移量。

BypassMergeSortShuffleWriter数据和文件结构

这种Shuffle写文件方式是有可能造成大量小文件给文件系统造成压力的情况,因此在选用该ShuffleWriter写入方式时做了限定默认只有<200分区方可使用BypassMergeSortShuffleWriter。为每个分区生成一个FileSegment后,会这些文件合并到一份数据文件中,并索引文件记录了每个分区在数据文件中的偏移量,能够做到随机访问指定RDD分区的数据

有兴趣可详读BypassMergeSortShuffleWriter#write的实现,这里我给出关键注释:

// BypassMergeSortShuffleWriter.java
public void write(Iterator<Product2<K, V>> records) throws IOException {
   
  assert (partitionWriters == null);
  ShuffleMapOutputWriter mapOutputWriter = shuffleExecutorComponents
      .createMapOutputWriter(shuffleId, mapId, numPartitions);
  try {
   
    // 没有需要写的记录,直接提交,结束
    if (!records.hasNext(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值