spark优化

spark优化

1、分配更多的资源

比如增加执行器个数(num_executor)、增加执行器个数(executor_cores)、增加执行器内存(executor_memory)

2、调节并行度

spark.default.parallelism

3、重构RDD架构以及RDD持久化

尽量去复用RDD,差不多的RDD可以抽取成一个共同的RDD,公共RDD一定要实现持久化

4、广播变量

SparkContext.broadcast方法创建一个对象,通过value方法访问

5、使用kryo序列化

SparkConf中设置属性:spark.serializer: org.apache.spark.serializer.kryoSerializer

6、使用fastutil优化数据格式(代替java中的Array、List、Set、Map)

7、调节数据本地化等待时长

调节参数: spark.locality.wait

JVM调优

降低cache操作的内存占比 1.6版本之前使用的是静态内存管理

spark中堆内存被划分为两块:

一块是专门来给RDD作cache\persist持久化的 StorageMemory,另一块是给spark算子函数运行使用的,存放函数中自己创建的对象。

1.6版本之后采用统一内存管理机制

storage和execution各占50%,若己方不足对方空余可占用对方空间

可尝试调节executor堆外内存

spark.yarn.executor.memoryOverhead = 2048m

调节连接等待时长

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

shuffle数据倾斜调优

1、预聚合源数据,对hive源表提前进行聚合操作,在hive聚合之后,spark任务再去读取

2、检查倾斜的key是否是脏数据,可以提前过滤

3、提高shuffle操作reduce的并行度

4、使用随机key实现双重聚合

5、将reduce端 join转换成map端 join

6、sample采样倾斜key,单独进行join后在union

7、使用随机数以及扩容表进行join

算子调优

1、使用mapPartition提升map类操作的性能

2、filter过后使用coalesce减少分区数量

3、使用foreachPartition优化写数据性能

4、使用repartition解决sparkSql低并行度的性能问题

5、reduceByKey替换groupByKey实现map读预聚合

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值