shuffleWrite进阶
2021-08-13 11:39:45 2 举报
spark shuffle 计算引擎
作者其他创作
大纲/内容
是否排序
Map任务会按照Partition id以及key对记录进行排序
bucket
core
MapTask
ReduceTask
索引
Spiil
BypassMergeSortShuffleWriter
根据core生成对应的文件: 4个 map task 分两批运行在 2个core上, 这样只会产生 8个小文件
UnsafeShuffleWriter
Map输出
shuffle fetch
SortShuffleWriter
排序位置
内存存储,满了Spill,第一次排序 排序的 K 是partitionId,并且会对数据进行压缩,无aggregation
最终结果
indexFile
一个DataFile+一个indexFile
Reduce Task
每次插入一条 record 到page 中,就把 partionId + 每次插入一条 record 到page 中,pageNumber + offset in page, 作为一个元素插入到 LongArray 中, 最终读取数据的时候, 对LongArray 进行 RadixSort 排序
partitionId+key
内存存储,满了Spill,第一次排序 排序的 K 是(partitionId, hash(key))
先内存排序,然后spill到文件然后在进行全局有序文件进行marge Sort
写到一个数据文件中,同时生成一个索引文件
dataFile
shuffle write
全局输出一个DataFile+一个indexFIle中间过程都需要落地多个文件针对各自的落地方式排序规则各有不同运用场景也不同有得适合reduceTask任务少的,有得适合不需要key排序的
Merge
现有方式,一个core只有一个文件:如果需要输出全局有序的文件的时候,就需要对之前所有的输出文件 和 当前内存中的数据结构中的数据进行 merge sort, 进行全局排序
4个map task, 4个reducer, 如果不使用 Consolidation机制, 会产生 16个小文件。
不同的shuffleWrite在生成零时文件-根据map任务,根据内存是否堆满,是否排序,是否根据key排序,存储的内容,排序的算法,合并的算法有所不同
0 条评论
下一页
为你推荐
查看更多