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