Spark部分:Hash shuffle 和sort shuffle的区别,以及产生磁盘小文件的个数

Hash shuffle和sort shuffle的区别:

Hash shuffle:

产生的磁盘小文件的个数为maptask*reducetask

每个分区是一个task

磁盘小文件多,I/O增多,产生的GC会增多。

这种shuffle产生的磁盘小文件,容易导致OOM

 

这种模式不单单产生的磁盘小文件比较多,而且占用内存也比较多。

我们应该降低这种磁盘之间的接触。

Hash shuffle的优化机制

两个task共用一个buffer缓冲区

 

sort shuffle:

Spark1.6之前用hash shuffle,在spark1.6之后使用sort shuffle

Sort shuffle的两种机制:

估算,去要内存5.01*2-5

要不到的时候就去排序

最终溢写的小的磁盘小文件合并成为了一个大的磁盘小文件

 

当不需要排序的时候,默认使用Bypass机制

 

bypass运行机制的触发条件:

Shuffle reduce task 数量小于spark.shuffle .sort.bypassMerge Threadshold参数的值

小于200,不开启,溢写磁盘不需要排序

小于等于的时候是开启的。

优化机制产生的磁盘小文件的个数:C*R

Hash shuffle:产生的磁盘小文件:M*R

Sort shuffle产生的磁盘小文件的个数为:2*M

Bypass机制产生的磁盘小文件的个数为:2*M

Spark部分:Hash shuffle 和sort shuffle的区别,以及产生磁盘小文件的个数

Spark部分:Hash shuffle 和sort shuffle的区别,以及产生磁盘小文件的个数