搜索
搜 索
本版
文章
帖子
用户
图文精华
hadoop-2.6.0+zookeeper-3.4.6+hbase-1.0.0+hive-1.1.0完全分布 ...
首页
Portal
专题
BBS
面试
更多
登录
注册
用户组:游客
主题
帖子
云币
我的帖子
我的收藏
我的好友
我的勋章
设置
退出
导读
淘贴
博客
群组
社区VIP
APP下载
今日排行
本周排行
本周热帖
本月排行
本月热帖
会员排行
About云-梭伦科技
»
专题
›
技术学习(版主发帖区)
›
大数据学习
›
Spark
›
总结型
›
spark开发实用经验总结包括调优等
1
1
3
分享
spark开发实用经验总结包括调优等
hyj
2019-4-10 11:50:56
发表于
总结型
[显示全部楼层]
阅读模式
关闭右栏
1
8281
问题导读
1.spark的执行原理包含哪些内容?
2.本文分享了哪些调优经验?
3.shuffle如何调优?
1:本文主讲的是client模式下的spark使用经验,spark由driver和executor组成,比如说1个driver和3个executor,driver提交节点提交节点资源,由driver-memory和drive程序组成,YARN资源队列有几个重要的名词,num_executors/executor-cores/executor-memory这几个。
其中client模式下,集群yarn无法控制driver上cores的使用数目和占用率,但是driver-memory是由java jvm组成的,不会超量
2:举一个实际案列,假如有一个user提交1个spark程序,长时间无法获得资源开始执行,并且假设YARN的资源队列没有满
那么这时候应该去看看他的spark-shell或者spark-submit的启动参数,一般情况下都是他executor-cores设置的过大了,>2一般就判断为过大
这块的原因是:在申请资源的时候,spark集群上的机器必须只有当 当台机器上的剩余cores>10,才能给用户来进行申请,所以越大一般就会越慢,这个user已经到10了,所以就非常大了
3:接下来讲一讲spark的执行原理
假如你是一段sql的话,读取了一个表的3个分区,每个分区的part数分别是4 5 6,那么你读到的rdd的分区就是4+5+6=15,也就是说hdfs文件有多少个分区,你的rdd初始也就是多少个。
在scala中,map filter flatMap这三个操作属于不会改变rdd分区数目的操作,reduceByKey join repartition的操作属于shuffle操作,会改变rdd的分区数,其中join操作大家可能不理解,熟悉python的人会以为join操作是在进行groupByKey,但实际上reduceByKey会比groupByKey块很多,所以scala中这个函数接口使用reduceByKey也写,有兴趣的朋友也可以自己实现下,不到20行就成。言归正传,改变分区数的时候,默认会改成200,这几个shuffle操作的函数也可以覆盖默认的分区数。除了这个默认参数,还可以在启动spark的时候,--conf中用参数进行默认值覆盖
当启动了3个executor的时候,你读到的rdd有6个分区,所以正常情况下回一个executor处理2个分区,
在经历shuffle类的操作的时候,你的整个spark程序就会运行到一个新的stage(相比于之前那个stage,增大1)
4:spark的执行原理--系列2--shuffle的原理
shuffle操作的时候,实际上都要经历一个排序过程,在task内部进行外部排序,排序的时候会使用key来进行排序,排完序后也会把key相同的数据方法哦一个分区里面,所以很容易出现数据倾斜的问题(shuffle write过程)
多个task做完排序后,接下来是reducer的操作,经过ExternalOnlyAppendMap操作,将相同的key的数据放到同一个block中(shuffle read过程)
网上很多资料有讲到一个RDD的executor操作如果同时处理两个分区数据的时候,这两个分区(stage)会共同占用这个executor的资源,但实际上我启动这样一个任务后去spark中看过资源情况,如果一个executor的内存设置为2G,2个core,那么这个executor就会占用到4G的内存
5:spark的执行原理--系列2--统一内存管理
spark中有3部分内存,
user memory:这里面存放的是java中的变量、类等
storage memory: RDD cache后、用户的自定义广播变量、系统的广播变量
execution memory: 程序进行shuffle、非shuffle操作的时候,都会被占用
但是storage memory execution memory之间的界限不明显,会在程序实际运行中互相占用
假设定义RDD&shuffle可用内存设置为0.6 spark.memory.fraction=0.6,将可用内存分成两部分的操作时 设置spark.memory.storageFraction=0.5,既然设定了storage用0.5,那么execute就用0.1,但实际上会相互调用
6:作业性能调优--这个章节主要讲解一些使用经验
第一个stage的task数目就是读取HDFS文件生成RDD的分区数
若不经过shuffle,RDD的分区数不会变化(union后是分区数之和,整体不变)
shuffle后分区数默认变成200
在stage内,每个分区对应一个task,是否所有的分区会同时执行,这取决于什么?取决于每个executor中的core数目
什么时候有必要改写RDD的分区数?多少合适些?当进行join这样的操作时,数据会极度的加大,这时候需要进行分区;每个分区的数据量大小需要控制到100MB到2G之间,不能太大,不能太小,样本数需要在50万左右即可;假如你申请的一个executor的内存是2G,那么一个分区的数据量大小最好在2G的一半左右;可以多尝试不同的分区数来尝试,因为你的程序可能不止是一遍跑完就算了
RDD的分区数=block数
前面的几种shuffle操作,比如join reduceByKey repartition的默认分区数是200,这几种操作都有个设置分区数的参数,可以自动修改。也可以在启动spark-shell或者spark-submit的时候,指定 --conf spark.default.parallrlism=1000 \ 来进行覆盖
假如1000个分区、100个executor、每个executor只有1个core,那么刚开始就会执行100个分区的数据;假如每个executor只有2个core ,那么刚开始就会执行200个分区的数据,而且每个executor 的2个core的占用内存并不是公用这个executor的内存,而是每个core都分配到你设置的executor的内存(这个理论和大多数不一样,但是可以去sparkui中实际计算下
7:接下来将几个shuffle调优的经验
假如有个任务在spark1.6中可以照常运行,在spark2.1中不可以,输入的数据量是6T。2.1中报错中有这样几个明显的标志--java.lang.OutOfMemory + ExternalAppendOnlyMap.insertAll CoGroupedRDD.comute这几个错误,那么可以断定是在shuffle截断报的错。
又因为是版本的不同,所以可以断定是--conf spark.reducer.maxReqsInFlight=10 这个参数的问题
maxReqsInFlight是指定的在shuffle操作时,执行节点向shuffle后的数据去拉取key的并行度,spark1.6中有限制数目,spark2后这个参数是无限大,在这个场景下,数据量过大,key数目就过大,拉取的并行度过大的时候就会出现内存错误。。
解决办法是:将这个参数设置成10
8:接下来讲解一个提交节点的错误,简单点直接说排查到的错误吧
当driver上的cpu使用率达到最大负载的时候,即使集群还有资源,你也提交不上去任务
最新经典文章,欢迎关注公众号
---------------------
作者:learner_ctr
来源:CSDN
原文:
https://blog.csdn.net/a1066196847/article/details/89034637
版权声明:本文为博主原创文章,转载请附上博文链接!
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
显身卡
已有(1)人评论
电梯直达
正序浏览
美丽天空
发表于 2019-4-11 21:46:55
感谢分享
回复
使用道具
举报
显身卡
还有一些帖子被系统自动隐藏,点此展开
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
发表新帖
hyj
超级版主
关注
1689
主题
2215
帖子
469
粉丝
TA的主题
ChatGPT上线了IOS app,很给力
2023-5-19
About云2023年05月19日每日一读
2023-5-19
数澜科技数据中台项目规范-V1.0.0
2023-5-18
现代数据架构
2023-5-18
12 个真正重要的数据质量指标
2023-5-18
24小时热文
像高手一样发言:七种常见工作场景的说话之
幕后产品:打造突破式产品思维
副业警钟,新型法律碰瓷发财方式:批量诉讼
Spark机器学习
Spark机器学习算法、源码及实战详解
关闭
推荐
/2
中文版ChatGPT
1.无需魔法 2.提高编程效率 3.提高文档能力
查看 »
新手帮助
新手帮助:注册遇到问题,领取资源,加入铁粉群,不会使用搜索,如何获取积分等
查看 »
意见
反馈