spark性能调优

基础调优

1、提交参数

可以设置executor数量,每个executor的内存/CPU核数,在资源允许的情况下越大越好
,没有什么是加一台服务器解决不了的
原则:根据业务数据量,集群物理配置,任务优先级进行配置,遇到计算瓶颈,加服务器,花钱一般都能搞定

2、并行度设置(分区数设置)

原则:尽量和cpu核数保持一致,为了充分压榨CPU的计算资源,可以设置为CPU核数的2-3倍

3、cache/persist+checkpoint

sc.setCheckpointDir('HDFS')
rdd.cache/persisit(memory_and_disk)
rdd.checkpoint

4、使用广播变量

val 广播变量名= sc.broadcast(会被各个Task用到的变量,即需要广播的变量)
广播变量名.value//获取广播变量

5、Kryo序列化(重要)

注意:在spark2.0之后,简单数据类型,数组,String组成的RDD,默认使用的就是Kryo序列化,如果自定义的对象要使用Kryo序列化,需要实现接口并配置参数

6、数据本地化读取等待时间

RDD算子优化

1、RDD复用
2、尽早filter
3、读取大量小 文件用wholeTextFiles
4、mapPartition和foreachPartition
5、repartition调节并行度,也可以通过conf参数配置
7、本地预聚合,能用reduceBykey,就不用了groupBykey

shuflle优化

1、当数据量更多的时候,把map和reduce端的缓冲区大小调大,reduce端重试和等待时间间隔调大
2、bypass机制开启阈值

数据倾斜优化

自定义分区器

JVM参数调优

1、调节cache内存百分比

val conf = new SparkConf().set("spark.storage.memoryFraction", "0.4")

2、设置对外内存直接使用操作系统的内存

–conf spark.yarn.executor.memoryOverhead=2048
3、设置连接等待时长

–conf spark.core.connection.ack.wait.timeout=300

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值