文档章节

Shuffle 调优之 HashShuffleManager 和 SortShuffleManager

GordonNemo
 GordonNemo
发布于 2018/11/14 17:30
字数 871
阅读 30
收藏 1

spark.shuffle.manager:hash、sort、tungsten-sort(自己实现内存管理)spark.shuffle.sort.bypassMergeThreshold:200

spark 1.2.x版本以后,默认的shuffle 
manager,是什么呢? 
SortShuffleManager。

SortShuffleManager与HashShuffleManager两点不同:
1、SortShuffleManager会对每个reduce 
task要处理的数据,进行排序(默认的)。 
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这个阈值,比如你的reduce 
task数量是500,默认阈值是200, 
所以默认还是会进行sort和直接merge的;可以将阈值调节成550,不会进行sort,按照hash的做法,每个reduce 
task创建一份输出文件,最后合并成一份文件。 
(一定要提醒大家,这个参数,其实我们通常不会在生产环境里去使用,也没有经过验证说,这样的方式,到底有多少性能的提升)

4、如果你想选用sort
based shuffle manager,而且你们公司的spark版本比较高,是1.5.x版本的,那么可以考虑去尝试使用tungsten-sort 
shuffle manager。看看性能的提升与稳定性怎么样。

总结:
1、在生产环境中,不建议大家贸然使用第三点和第四点:2、如果你不想要你的数据在shuffle时排序,那么就自己设置一下,用hash 
shuffle 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.调优以后大致的效果如何?
 

© 著作权归作者所有

GordonNemo
粉丝 10
博文 74
码字总数 134856
作品 0
杭州
架构师
私信 提问
Spark性能优化篇四:shuffle调优

Spark性能优化篇四:shuffle调优 shuffle调优 调优概述 大多数Spark作业的性能主要就是消耗在了shuffle环节,因为该环节包含了大量的磁盘IO、序列化、网络数据传输等操作。因此,如果要让作业...

u010262291
2018/05/30
0
0
Spark性能优化指南—— shuffle调优

大多数Spark作业的性能主要就是消耗在了shuffle环节,因为该环节包含了大量的磁盘IO、序列化、网络数据传输等操作。因此,如果要让作业的性能更上一层楼,就有必要对shuffle过程进行调优。但...

datacube
2016/07/12
47
0
spark HashShuffleManager调优

HashShuffle调优概述 大多数Spark作业的性能主要就是消耗在了shuffle环 节,因为该环节包含了大量的磁盘IO、序列化、网络数据传输等操作。因此,如果要让作业的性能更上一层楼,就有必要对s...

JPblog
2016/07/29
236
0
Spark技术内幕:Shuffle的性能调优

通过上面的架构和源码实现的分析,不难得出Shuffle是Spark Core比较复杂的模块的结论。它也是非常影响性能的操作之一。因此,在这里整理了会影响Shuffle性能的各项配置。尽管大部分的配置项在...

hblt-j
2017/11/08
496
0
Spark 性能相关参数配置详解-shuffle篇

随着Spark的逐渐成熟完善, 越来越多的可配置参数被添加到Spark中来, 在Spark的官方文档http://spark.apache.org/docs/latest/configuration.html 中提供了这些可配置参数中相当大一部分的说明...

Zero零_度
2016/09/29
30
0

没有更多内容

加载失败,请刷新页面

加载更多

IDEA 拉取、上传、更新 项目到 Gitee+GitHub_超详细超简单版

注:本人使用的idea是最新版(2019.1.2),要是其他的版本的不要惊慌〜,基本上都一样,没有什么太大的差别的 首先我要说一下,拉取项目分两个,一个,你就没有项目,拉取仓库的整个项目,而...

杨木发
今天
54
0
pyqt5环境搭建(Ubuntu19.10+pycharm+python3)

1.安装pyqt5 sudo apt-get install python3-pyqt5 sudo apt-get install qttools5-dev-tools sudo apt-get install qt5-default 2.安装pycharm 下载pycharm社区版安装包并解压 在桌面新建pyc......

小芯片
今天
54
0
Vue造轮子-tab组件(中)

1. 如果给一个标签一个class,标签本身又有class,vue是默认会合并的。只有两个属性是这样一个是class,一个是style。这样就比较好改样式。 <g-tabs-head class="red"></g-tabs> 2. 组件的...

ories
昨天
59
0
Windows 版本 Anaconda 配置加速源安装软件

C:\Users\lenovo\.condarc 首先安装Anaconda最新版本。 其次添加安装目录到环境变量。文本为 C:\ProgramData\Anaconda3\Library\bin 运行 conda 命令在 Windows 用户下生成文件 .conda...

白豆腐徐长卿
昨天
232
0
如何从Bash函数返回字符串值

我想从Bash函数返回一个字符串。 我将用Java编写示例以显示我想做的事情: public String getSomeString() { return "tadaa";}String variable = getSomeString(); 下面的示例在bash中...

javail
昨天
71
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部