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

Spark2.3.2源码解析:Shuffle 过程写入的 数据文件&索引文件

 

org.apache.spark.util.collection.WritablePartitionedPairCollection#destructiveSortedWritablePartitionedIterator
 

 

这里具体写了什么呢???

 

Spark2.3.2源码解析:Shuffle 过程写入的 数据文件&索引文件

 

其实就是key-value 形式的数据.  后台打印的日志如下:

Spark2.3.2源码解析:Shuffle 过程写入的 数据文件&索引文件

 

写入索引文件:

org.apache.spark.shuffle.IndexShuffleBlockResolver#writeIndexFileAndCommit

Spark2.3.2源码解析:Shuffle 过程写入的 数据文件&索引文件

 

 

最终生成的数据文件是什么样子的呢?

Spark2.3.2源码解析:Shuffle 过程写入的 数据文件&索引文件

 

 

这个就是生成的 文件, 每个不同阶段的文件,生成在不同的目录里面, 我把索引文件和数据文件摘出来了.

(索引和数据文件不一定在同一个目录中.)

我们来看看,里面的数据倒是什么样子的.

 

先看数据文件.  shuffle_0_0_0.data(  二进制文件 )

Spark2.3.2源码解析:Shuffle 过程写入的 数据文件&索引文件

 

索引文件 (  shuffle_0_0_0.index  )

 

Spark2.3.2源码解析:Shuffle 过程写入的 数据文件&索引文件

 

 

好吧,竟然全是二进制文件

等以后在研究吧,如果知道的同学,请指教,不胜感激........