Spark笔记(3)-Spark程序调优
来源:互联网 发布:java读取上传文件内容 编辑:程序博客网 时间:2024/05/16 10:58
对于一个Spark程序,采用不同的优化,运行效率差别很大,下面是对Spark程序调优进行总结,分三个部分:
优化Spark运行环境
1. 防止不必要的jar包上传于分发
2. 提高数据本地性
解决方法:计算与存储同节点部署、增加executor数目、增加数据副本数3. 存储格式选择
选择列式存储:减少读IO量,占用存储空间少(压缩比高)优化RDD操作符的使用方法
1. 过滤操作导致产生很多小任务
解决方法:对数据过滤后,使用coalesce操作符合并若干分片(Partition)
2. 降低单条记录处理开销
解决方法:使用mapPartitions或mapWith操作符
3. 数据倾斜或任务倾斜
解决方法:选择合理的Partition key、克服慢节点导致任务运行缓慢(慢节点磁盘老化,负载过重等):将存在问题的节点从集群中剔除4. 对复用的RDD进行缓存
解决方法:使用cache操作符5. 对操作符的选择
避免使用笛卡尔积(Cartesian)
尽可能避免shuffle操作
尽量用reduceByKey代替groupByKey
用treeReduce代替reduce
参数调优
1. 设置合适的资源量
Executor个数(core总数应小于Task数目),Excutor的内存,Excutor的并发任务数,Driver的内存(如果用到broadcast,是要适当调大Driver内存)
2. 设置合理的JVM参数
包括内存参数、Log4j以及lib路径参数、定制化JDK版本
3. 启用更高效的序列化方法
默认采用Java序列化方法,速度缓慢,建议启用Kyro序列化方法:将spark.serializer设为org.apache.spark.serializer.KryoSerializer,缺点是兼容性差
4. 增大off heap内存大小(默认memory*0.1)
5. shuffle参数调优
Reduce Task数目较多时,选择Sort-based实现(默认实现)
6. 设置Reduce Task数目
数目过小,运行过慢,且可能导致OOM,数目过大,产生较多的小人物,启动和调度开销增大
显式设置方法:rdd.groupByKey(100);rdd.reduceByKey(_+_,100)
- Spark笔记(3)-Spark程序调优
- Spark GC调优笔记
- spark in eclipse---Spark学习笔记3
- Learning Spark笔记3-传递函数给Spark
- Spark问题笔记3
- 关于spark driver程序调优
- Spark学习笔记之-Spark 命令及程序入口
- Spark学习笔记(三)-开始第一个spark程序
- spark 笔记(二) 参数设置和调优
- Spark笔记
- spark笔记
- Spark笔记
- spark笔记
- spark 笔记
- SPARK笔记
- Spark笔记
- spark笔记
- Spark笔记
- jsonview插件
- Hadoop学习笔记——01.简介
- C++ 输出流的格式化
- logback.xml 基本配置
- 深入理解java接口和抽象类
- Spark笔记(3)-Spark程序调优
- opencv2生成图像的梯度图
- 两个ViewPager嵌套
- Python中Generators教程
- linux中RPM方式安装mysql
- SecureCRT 配置自动记录日志
- jQuery 遍历 - each() 方法
- cocos2d-x 3.9遇到过的坑
- 问题四十一:怎么用ray tracing画任意圆柱面(generalized cylinder)