Shuffle 调优之 HashShuffleManager 和 SortShuffleManager
2017-12-23 16:25
246 查看
spark.shuffle.manager:hash、sort、tungsten-sort(自己实现内存管理)spark.shuffle.sort.bypassMergeThreshold:200
spark 1.2.x版本以后,默认的shuffle
manager,是什么呢?
SortShuffleManager。
SortShuffleManager与HashShuffleManager两点不同:
1、SortShuffleManager会对每个reducetask要处理的数据,进行排序(默认的)。
2、SortShuffleManager会避免像HashShuffleManager那样,默认就去创建多份磁盘文件。一个task,只会写入一个磁盘文件,不同reduce
task的数据,用offset来划分界定。之前讲解的一些调优的点,比如consolidateFiles机制、map端缓冲、reduce端内存占比。
这些对任何shuffle
manager都是有用的。
总结:
如何来选择?
1、需不需要数据默认就让spark给你进行排序?就好像mapreduce,默认就是有按照key的排序。
如果不需要(不需要排序)的话,其实还是建议搭建就使用最基本的HashShuffleManager,因为最开始就是考虑的是不排序,换取高性能;
2、什么时候需要用sort
shuffle manager?如果你需要你的那些数据按key排序了,那么就选择这种吧,
而且要注意,reduce
task的数量应该是超过200的,这样sort、merge(多个文件合并成一个)的机制,才能生效把。
但是这里要注意,你一定要自己考量一下,有没有必要在shuffle的过程中,就做这个事情,毕竟对性能是有影响的。
3、如果你不需要排序,而且你希望你的每个task输出的文件最终是会合并成一份的,你自己认为可以减少性能开销;
可以去调节bypassMergeThreshold这个阈值,比如你的reducetask数量是500,默认阈值是200,
所以默认还是会进行sort和直接merge的;可以将阈值调节成550,不会进行sort,按照hash的做法,每个reduce
task创建一份输出文件,最后合并成一份文件。
(一定要提醒大家,这个参数,其实我们通常不会在生产环境里去使用,也没有经过验证说,这样的方式,到底有多少性能的提升)
4、如果你想选用sort
based shuffle manager,而且你们公司的spark版本比较高,是1.5.x版本的,那么可以考虑去尝试使用tungsten-sortshuffle manager。看看性能的提升与稳定性怎么样。
总结:
1、在生产环境中,不建议大家贸然使用第三点和第四点:2、如果你不想要你的数据在shuffle时排序,那么就自己设置一下,用hashshuffle manager。3、如果你的确是需要你的数据在shuffle时进行排序的,那么就默认不用动,默认就是sort
shuffle manager;
或者是什么?如果你压根儿不care是否排序这个事儿,那么就默认让他就是sort的。调节一些其他的参数(consolidation机制)。(80%,都是用这种)
spark.shuffle.manager:hash、sort、tungsten-sortnew
SparkConf().set("spark.shuffle.manager", "hash") new SparkConf().set("spark.shuffle.manager", "tungsten-sort")// 默认就是,new SparkConf().set("spark.shuffle.manager", "sort")new SparkConf().set("spark.shuffle.sort.bypassMergeThreshold", "550")【兼顾合一,又不排序,性能较高】
大数据项目跟传统的项目区别
50%代码coding + 50%性能调优、troubleshooting、数据倾斜的解决。
关注以下三点:
1.什么时候去调优?
2.怎么调优? (看UI,调参数)
3.调优以后大致的效果如何?
相关文章推荐
- shuffle性能调优之HashShuffleManager和SortShuffleManager
- spark HashShuffleManager调优
- SortShuffleManager方法头注释
- 第23课:Spark旧版本中性能调优之HashShuffle剖析及调优(内含大数据Shuffle本质及其思考)
- Spark中hashshuffle与sortshuffle
- [Spark性能调优] 第二章:彻底解密Spark的HashShuffle
- Spark商业案例与性能调优实战100课》第36课:彻底解密Spark 2.1.X中Sort Shuffle中Reducer端源码内幕.pptx>>
- 《Spark商业案例与性能调优实战100课》第25课:Spark Hash Shuffle源码解读与剖析
- 【spark】HashShuffleManager解析
- 第23课:Spark旧版本中性能调优之HashShuffle剖析及调优
- 《Spark商业案例与性能调优实战100课》第35课:彻底解密Spark 2.1.X中Sort Shuffle中TimSort排序源码具体实现
- 54:Spark中的Tungsten-sort Based Shuffle内幕
- Nested Loops Join、Hash join、Merge Sort Join三大经典表连接浅谈(笔记)
- Hash unique和Sort unique
- ACE_Hash_Map_Manager_Ex ACE哈希表字符串处理
- Spark性能优化-------shuffle调优
- Spark性能优化第六季-Shuffle性能调优
- Hadoop : MapReduce中的Shuffle和Sort分析
- oracle sql调优学习笔记(三)表的连接方式:NESTED LOOP、HASH JOIN、SORT MERGE JOIN
- spark性能优化:高级篇(数据倾斜调优,shuffle调优)