spark 2.1 sort-based shuffle

        spark的shuffle从最开始的basic HashShuffle的M*R个中间文件,到优化的consalidate方式的C*R个中间文件。但他们的缺点还是太明显,在面对数据量巨大的集群运算会产生巨多的中间文件。大量的读取操作且会占用大量的Memory(易造成OOM)。所以在spark 2.0之后remove了HashShuffle,开始只使用on-heap或off-heap的sort-based shuffle。

SparkEnv.scala

它产生的中间文件为2*M个,其中M个shuffle output的data文件,M个记录Index文件。

index文件是根据task生成的目标partition id进行排序的(data并没有排序)。

SortShuffleManager.scala

Sort-based shuffle也分为两种:

一种是序列化的排序:

1.shuffle依赖不能有聚合和输出排序操作

2.shuffle序列化支持序列化过的值的迁移操作

3.shuffle产生的partitions不能超过16777216个

一种是反序列化的排序,以上3个条件之外的情况都用这个去处理。

好处呢就是:

你可能感兴趣的:(spark 2.1 sort-based shuffle)