spark调优-第一天

         广大的博客友们,你们好,在这个刚过完冬至的第一个周末,下班了坐在电脑前对着电脑想了想最近做的项目,spark实时统计分析,真的非常累,做项目的时候不是你把代码写完了就可以了,还要做优化的,让程序跑的更快,更流畅,本人在公司也负责了小段时间的spark调优,之前做的hadoop调优,自己感觉spark调优跟hadoop差不多,都是从一些层面分析的,设置一些属性值等等。好啦,不多说了,开始进入正题,这篇博客是我集合项目中正在用到跟用到的跟大家介绍下,其中有的部分也是在网上查的资料,当然这么多调优不可能全部用到,今天先给大家做一个大体的调优方案,可以从以下方面入手。更详细的下篇博客,

  • 性能调优:
    1. 分配更多资源
    2. 调节并行度
    3. RDD持久化
    4. 广播变量
  • JVM调优
    1. 降低cache操作的内存占比
    2. 调节executor堆外内存与连接等待时长
  • Shuffle调优
    1. 合并map端输出文件
    2. 调节map端内存缓冲(32KB)跟reduce端内存占比(0.2)
    3. 合理使用hashShuffleManager,sortShuffleManger,tungsten-sort
  • 算子调优
    1. MapPartitions提升Map类操作性能
    2. filter过后使用coalesce减少分区数量
    3. 使用foreachPartition优化写数据库性能
    4. 使用repartition解决Spark SQL低并行度的性能问题
    5. reduceByKey本地聚合介绍
  • troubleshooting(故障排除)
    1. 控制shuffle reduce端缓冲大小以避免OOM
    2. 解决JVM GC导致的shuffle文件拉取失败
    3. YARN队列资源不足导致的application直接失败
    4. 解决各种序列化导致的报错
    5. 解决算子函数返回NULL导致的问题
    6. 解决yarn-client模式导致的网卡流量激增问题
    7. 解决yarn-cluster模式的JVM栈内存溢出问题
    8. 错误的持久化方式以及checkpoint的使用
  • 数据倾斜解决方案
    1. 聚合源数据以及过滤导致倾斜的key
    2. 提高shuffle操作reduce并行度
    3. 提升shuffle reduce端并行度的操作方法
    4. 使用随机key实现双重聚合
    5. 将reduce join转换为map join
    6. ample采样倾斜key单独进行join使用随机数以及扩容表进行join

猜你喜欢

转载自blog.csdn.net/qq_32736999/article/details/83902973