【Spark深入学习 -14】Spark应用经验与程序调优

3.4.3 启用更高效的序列化方法

3.4.4 增大off head内存

3.4.5 shuffle参数调优

3.4.6 设置reduce task数目

3.4.7 使用spark sql实现

4.Spark 调优案例

5.参考资料


1.遗留问题

1)BAT这样的企业内部是如何开发和运行Spark程序的?

· 开发和测试

intellij进行开发,对scala支持的非常好,java也支持的很好,开发好了在local模式下运行进行测试,intellij是不能远程提交到集群的,itellij没有分发jar包功能。

· spark生产环境运行

将所有依赖的包打成assembly.jar包,这样不再依赖环境里的任何模式,一般用yarn cluster模式运行(driver可以容错),可以用yarn client模式进行测试。每天要跑,可以使用工作流调度器,按照你的设置定时定点跑程序,如果出错了可以报警,工作流调度引擎,可以处理复杂的依赖,用的比较多的开源

airflow:轻量级,很多公司用

oozie:比较复杂

2)编译spark程序非常慢

修改mavn pom仓库,将国外的仓库,改成国内的仓库,如阿里云

3)Spark参数的设置问题

有三种设置方式,  在程序内设置(优先级高),提交参数设置(优先级中),配置文件配置(优先级低),park-default:常用的可以在配置文件中配

2.Spark调优初体验

调优程序,首先得知道程序慢在哪里,要定位问题,找到优化的点。定位问题又涉及到很多层面,机器硬件、网络、操作系统、JVM虚拟机、大数据软件平台层、软件开发层,所以调优是一个综合工程,Spark程序调优可以分为以下几个层面:

1)基础设施层

机器硬件(如磁盘的选择,SATA盘还是SAS盘,磁盘RAID方式等)、网络(千兆网卡还是万兆网卡,网络峰值期间的带宽、吞吐、网络延迟、网络抖动,很多时候网络问题导致各种莫名问题,举个真实的例子,公司网线被老鼠咬了,导致网络时而可以,时而不行,鬼知道是什么问题,让人抓狂)、操作系统(操作系统的稳定性,内核版本的选择,非常重要,还有一些配置策略得和hadoop生态吻合)。这些都非常底层了,就网络、linux操作系统就够花时间学习和了解的了,很多时候需要系统集成部的同事一起配合。

2)大数据平台层:HDFS、YARN、Hive、Spark、JVM等

JVM的调优,还没有什么经验,而且目前也没有非常深入,最多也就是GC策略挑挑,大数据平台调优真是个技术活,需要很多经验。

3)程序开发层

开发工程师程序开发技巧、对业务的理解等

2.1利用WebUI分析Spark程序瓶颈

选择合适的资源,前提是了解集群有多少资源 。1)集群内存总量:单台节点共8G,2G给datanode,6G个spark做计算(yarn共有18G,3个节点);2)集群CPU总合数:  每个机器有8个CPU,共24个core;3)集群总存储:总存储空间有多少,一般保证20%左右的剩余空间,要不然会影响集群整体性能,HDFS剩余空间不足也会导致任务执行很慢,甚至失败。

如何观察和评估程序的效率怎么执行shell,跑spark任务就不讲了,说明一下如何观察Spark任务执行的瓶颈,从哪几个指标观察任务执行的效率。

指标一:观察Spark任务解析和提交消耗的时间

主要涉及到的是jar包上传的优化,这里面分为2种情况:

1)程序依赖的jar,这种通常是spark lib目录下的所有jar包,有好几百兆,spark程序会上传这些,为了提升效率,可以提前上传好,

2)程序自身的jar包,如果程序不经常变动,也可以提前上传到HDFS上。

指标二:观察WebUI产生的系统监控数据

这里面有很多指标,罗列如下

1)观察job监控参数,产生了多少个job,一个action对应一个job,如果action之间没有依赖关系,资源有富余,可以让job并行执行。

2)观察stage监控参数,一个job分解成了结果stage,每个stage执行了多少时间,输入了多少数据量,shuffle read了多少数据,shuffle write 了多少数据。

3)观察executor监控参数,driver在哪里,executor在哪里,每个executor启动了几个CPU核数,起了多少内存,输入多少数据(可以查看数据是否有倾斜),shuffle了多少数据,内存放了多少数据,GC执行了多少时间。还可以查看stderr,查看日志。

4)观察每个task监控参数,task执行的时间,GC执行的时间,读入的数据总大小和记录数,shuffle的大小,task执行时的本地行,举个执行的任务例子,如下所示

可以看出来,一共有2个stage,1个stage包含8个task,一个包含2个task,先跑8个的,再跑2个的,一个14秒,一个0.1秒。再看看executor,发现只有2个executor,一个executor只有1个core,也就是一个executor只能处理一个task,集群也就是最多跑2个,10个task要跑5轮

再点击stage的链接进去,观察每个task跑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值