性能优化

性能调优包含 :开发调优、资源调优、数据倾斜调优、shuffle调优几个部分

参考文档:https://tech.meituan.com/2016/04/29/spark-tuning-basic.html

 

 

driver:     任务管理者,向集群申请资源,分配任务,合并数据(不是实际任务的运行之地)

executor:分布在多个节点上,实际任务的运行之地,

executor-core:每个executor中的线程数,提高task的并发程度

executor-num:在集群中申请多少executor,充分利用集群资源,提高效率

parallelism :开启参数,提高每个stage的任务数量,充分利用资源,提高并发度(task默认数量根据hdfs默认block划分,如果没有开启参数,block少的话,task任务就少,导致设置的executor-core 与 executor-num 设置的起不到作用)

 

数据倾斜调优:

数据倾斜的现象:大多数task执行比较快,个别task任务执行比较慢,导致整体任务执行慢

数据倾斜的原因:发生在shuffle阶段,相同的key会被shuffle 到一个task中执行,如果有个别key数据量特别大,就会导致 task执行缓慢,甚至出现内存溢出现象

数据倾斜的算子:由于发生在shuffle阶段,会触发shuffle的计算算子:distinct, join,groupbykey,reduceByKey,repatition,等

分析原因:找到执行缓慢的task所在stage,定位代码位置,找到倾斜的算子(spark-ui或 stage划分原理)stage划分原理:大多数是根据shuffle算子来划分,shuffle前stage,shuffle后一个stage。

优化:了解数据的分布,导致倾斜的key分布,抽样查看key的分布

解决方案:无非是减少数据量

1、预处理,在hive etl中 先聚合减少key的量,或者join减少 到spark算子的计算。治标不治本,再次使用数据源还会产生倾斜,hive中倾斜

2、过滤掉数据倾斜的key,

3、提高shuffle并发度,spark.sql.shuffle.partitions设置参数,提高并非度,让key分布到多个task中,减少每个task数据量(某一个key特别大时还是会出现倾斜)

4、给key增加随机数,让数据分布到不同的task中,使用groupby 不使用join

5、mapjoin 将小表加入每个节点内存(原理不产生shuffle算子)

6、单独处理大数据量key,增加随机数。给纬表key膨胀数据

7、整体膨胀纬度表key

8、group by 长尾  ,count() group by key cast(rand()*10 as int) ;sum() group by key 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值