Spark性能优化总结

注:

本文是根据以下两篇文章进行的总结。

https://tech.meituan.com/spark-tuning-basic.html

https://tech.meituan.com/spark-tuning-pro.html


Spark性能优化总结

1          开发调优

1.1         原则一:避免创建重复的RDD

1.2         原则二:尽可能复用同一个RDD

1.3         原则三:对多次使用的RDD进行持久化

1.4         原则四:尽量避免使用shuffle类算子

1.5         原则五:使用map-side预聚合的shuffle操作

1.6         原则六:使用高性能的算子

1.7         原则七:广播大变量

1.8         原则八:使用Kryo优化序列化性能

1.9         原则九:优化数据结构

2          资源调优

2.1         num-executors

2.2         executor-memory

2.3         executor-cores

2.4         driver-memory

2.5         spark.default.parallelism

2.6         spark.storage.memoryFraction

2.7         spark.shuffle.memoryFraction

3          数据倾斜调优

3.1         定位导致数据倾斜的代码

3.1.1    某个task执行特别慢的情况

3.1.2    某个task莫名其妙内存溢出的情况

3.2         查看导致数据倾斜的key的数据分布情况

3.3         数据倾斜的解决方案

3.3.1    使用Hive ETL预处理数据

3.3.2    过滤少数导致倾斜的key

3.3.3    提高shuffle操作的并行度

3.3.4    两阶段聚合(局部聚合+全局聚合)

3.3.5    将reduce join转为map join

3.3.6    采样倾斜key并分拆join操作

3.3.7    使用随机前缀和扩容RDD进行join

3.3.8    多种方案组合使用

4          Shuffle 调优

4.1         ShuffleManager发展概述

4.1.1    HashShuffleManager

4.1.1.1   未经优化的HashShuffleManager

4.1.1.2   优化后的HashShuffleManager

4.1.2    SortShuffleManager

4.1.2.1   普通运行机制

4.1.2.2   bypass运行机制

4.1.3    shuffle相关参数调优

4.1.3.1   spark.shuffle.file.buffer

4.1.3.2   spark.reducer.maxSizeInFlight

4.1.3.3   spark.shuffle.io.maxRetries

4.1.3.4   spark.shuffle.io.retryWait

4.1.3.5   spark.shuffle.memoryFraction

4.1.3.6   spark.shuffle.manager

4.1.3.7   spark.shuffle.sort.bypassMergeThreshold

4.1.3.8   spark.shuffle.consolidateFiles


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值