spark shuffle写操作——BypassMergeSortShuffleWriter

创建分区文件writer

每一个分区都生成一个临时文件,创建DiskBlockObjectWriter对象,放入partitionWriters

分区writer写入消息

遍历所有消息,每一条消息都使用分区器选择对应分区的writer然后写入

生成分区文件

将分区writer的数据flush,每个分区生成一个FlieSegment,保存在partitionWriterSegments

分区writer的commit

可以看到生成的fileSegment中file还是上面的分区临时文件

合并分区临时文件

遍历分区临时文件,获取对应的合并writer,将临时文件的数据写入到合并writer中

获取合并的writer

生成一个临时文件,多个reducer使用同一个临时文件。

每个分区都会生成一个LocalDiskShufflePartitionWriter

LocalDiskShufflePartitionWriter类核心方法有两个openStream、openChannelWrapper。

两个方法分别调用对应的init方法,返回PartitionWriterStream的stream对象和PartitionWriterChannel的channel对象。

PartitionWriterStream的write方法中使用outputBufferedFileStream,在initStream中可以看到outputBufferedFileStream使用的上面生成的临时文件outputTempFile。

PartitionWriterChannel的channel方法返回的是outputFileChannel,outputFileChannel在initChannel中使用的也是上面生成的临时文件outputTempFile。

这表明无论使用stream还是channel,最后都是写入临时文件outputTempFile中。



临时文件数据写入合并writer

writePartitionedDataWithChannel是使用channel的方式,调用copyFileStreamNIO

writePartitionedDataWithStream是使用stream的方式,调用copyStream

copyFileStreamNIO

可以看到使用了transferTo方法(零拷贝)

copyStream

先判断是否能使用transferTo,能的话就调copyFileStreamNIO用零拷贝的方式,不行的话就走普通的流复制

最终的分区文件提交

将最终的分区临时文件提交,生成对应的data文件和index文件。

可以看到是调用的IndexShuffleBlockResolver类的writeIndexFileAndCommit方法。

相关推荐
AI行业应用研究几秒前
会务信息载体的演进:纸质、PDF 与结构化数据源的分发成本与版本一致性
大数据·人工智能·安全·小程序·架构·pdf
luo_guibin2 分钟前
Linux系统下OpenSSL升级全流程,新旧版本切换
linux·运维·服务器
yumgpkpm9 分钟前
CDP 7.3.1(Cloudera Runtime 7.3.1)VS Acceldata ODP 3.3.6.4 核心引擎详细版本对比
大数据·hive·hadoop·postgresql·zookeeper·spark·hbase
看着博客敲代码10 分钟前
No space left on device:服务器被 SSH 爆破到日志写满的完整排查与止血
linux·运维·服务器·安全·ssh
明日清晨10 分钟前
mobaxterm root身份登录Ubuntu
linux·ubuntu·postgresql
沫璃染墨11 分钟前
《Linux工程实践篇(二):线程池实战——从线程安全单例到完整源码实现》
linux·开发语言·c++·单例模式·设计模式·系统架构
starzy199016 分钟前
Flink SlotManager启动流程源码深度剖析:从ResourceManager到Slot分配的完整链路
java·大数据·flink
4SAPI19 分钟前
AI API Gateway平台哪个好?从架构视角看企业多模型网关选型与实践
java·大数据·人工智能·gateway·php
计算机毕业编程指导师43 分钟前
【计算机大数据毕业设计选题】基于Hadoop+Spark的人工智能社交媒体情绪数据分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·人工智能·hadoop·计算机·毕业设计·课程设计·社交媒体
Allocator1 小时前
彻底解决ubuntu上腾讯会议无法共享问题
linux·ubuntu·腾讯会议