Spark2.3.2源码解析:Shuffle 过程写入的 数据文件&索引文件
Spark 在 shuffle 过程中,如果内存空间不足会向磁盘溢写文件, 一个索引文件,一个数据文件.
那么这两个文件长什么样? 里面放什么数据呢?
文件命名:
ShuffleBlockId : "shuffle_" + shuffleId + "_" + mapId + "_" + reduceId
数据文件名:
ShuffleDataBlockId : "shuffle_" + shuffleId + "_" + mapId + "_" + reduceId + ".data"
索引文件名:
ShuffleIndexBlockId : "shuffle_" + shuffleId + "_" + mapId + "_" + reduceId + ".index"
数据写入代码: org.apache.spark.shuffle.sort.SortShuffleWriter# write
org.apache.spark.util.collection.ExternalSorter#writePartitionedFile
org.apache.spark.util.collection.WritablePartitionedPairCollection#destructiveSortedWritablePartitionedIterator
这里具体写了什么呢???
其实就是key-value 形式的数据. 后台打印的日志如下:
写入索引文件:
org.apache.spark.shuffle.IndexShuffleBlockResolver#writeIndexFileAndCommit
最终生成的数据文件是什么样子的呢?
这个就是生成的 文件, 每个不同阶段的文件,生成在不同的目录里面, 我把索引文件和数据文件摘出来了.
(索引和数据文件不一定在同一个目录中.)
我们来看看,里面的数据倒是什么样子的.
先看数据文件. shuffle_0_0_0.data( 二进制文件 )
索引文件 ( shuffle_0_0_0.index )
好吧,竟然全是二进制文件
等以后在研究吧,如果知道的同学,请指教,不胜感激........