Spark性能优化的10大问题及其解决方案

问题1:reduce task数目不合适

解决方式:

需根据实际情况调节默认配置,调整方式是修改参数spark.default.parallelism。通常,reduce数目设置为core数目的2到3倍。数量太大,造成很多小任务,增加启动任务的开销;数目太少,任务运行缓慢。

问题2:shuffle磁盘IO时间长

解决方式:

设置spark.local.dir为多个磁盘,并设置磁盘为IO速度快的磁盘,通过增加IO来优化shuffle性能;

问题3:map|reduce数量大,造成shuffle小文件数目多

解决方式:

默认情况下shuffle文件数目为map tasks * reduce tasks

通过设置spark.shuffle.consolidateFiles为true,来合并shuffle中间文件,此时文件数为reduce tasks数目;

问题4:序列化时间长、结果大

解决方式:

Spark默认使.用JDK.自带的ObjectOutputStream,这种方式产生的结果大、CPU处理时间长,可以通过设置spark.serializer为org.apache.spark.serializer.KryoSerializer。

另外如果结果已经很大,可以使用广播变量;

问题5:单条记录消耗大

解决方式:

使用mapPartition替换map,mapPartition是对每个Partition进行计算,而map是对partition中的每条记录进行计算;

问题6 : collect输出大量结果时速度慢

解决方式:

collect源码中是把所有的结果以一个Array的方式放在内存中,可以直接输出到分布式?文件系统,然后查看文件系统中的内容;

问题7: 任务执行速度倾斜

解决方式:

如果是数据倾斜,一般是partition key取的不好,可以考虑其它的并行处理方式 ,并在中间加上aggregation操作;

如果是Worker倾斜,例如在某些worker上的executor执行缓慢,可以通过设置spark.speculation=true 把那些持续慢的节点去掉;

问题9: 通过多步骤的RDD操作后有很多空任务或者小任务产生

解决方式:

使用coalesce或repartition去减少RDD中partition数量;

问题10:Spark Streaming吞吐量不高

解决方式:

可以设置spark.streaming.concurrentJobs

最新文章

  1. Unity3D 导航网格自动寻路(Navigation Mesh)
  2. .net 事务处理的三种方法
  3. Nginx反爬虫
  4. s3c2440存储控制器和地址以及启动的理解
  5. 【BZOJ】【3613】【HEOI2014】南园满地堆轻絮
  6. IOS 提交审核,遇到Missing Push Notification Entitlement 问题。
  7. 内存泄露(OOM)现象及举例
  8. SQL中数据类型转换
  9. phpcms v9框架的目录结构分析
  10. sphinx+reStructuredText制作文档
  11. Replacement(思维题)
  12. Python函数学习——递归
  13. centOS7防火墙关闭失败问题
  14. Lock接口
  15. centos 7扩展磁盘分区容量
  16. lambda表达式Bug——修改捕获变量失败
  17. Linux监控本机当前状态命令
  18. Kubernetes学习之路(八)之Kubeadm部署集群
  19. gdb调试时的问题Missing separate debuginfos, use: debuginfo-install glibc-XXX
  20. Js数组的常用的方法概述

热门文章

  1. vs2015安装ORACLE的DbFirst
  2. DeepLearning4J 环境搭建【转】
  3. SQLServer中求两个字符串的交集(字符串以符号分隔)
  4. 系统管理员都要知道的 30 个 Linux 系统监控工具
  5. mysql索引相关理解
  6. linux tcp server demo
  7. 【转】jMeter入门实例
  8. Java 定义常量
  9. Python Tuples
  10. Arduino教程资料汇总(8月22日悄悄跟新了一下)