Spark常见优化原则

简介: 提交任务参数请参考这篇文章(包括优化建议):Spark部署模式、任务提交 - GoAl

一、参数调优


提交任务参数请参考这篇文章(包括优化建议):Spark部署模式、任务提交 - GoAl


spark任务:编写脚本或代码里设置参数

 • 第一块:让task执行代码时,默认占executor总内存的20%。

• 第二块:task通过shuffle过程拉取上一个stage的task的输出后,进行聚合等操作时默认也是占Executor总内存的20%,使用Task的执行速度和每个executor进程的CPU Core数量有直接关系,一个CPU Core同一时间只能执行一个线程,每个executor进程上分配到的多个task,都是以task一条线程的方式,多线程并发运行的。如果CPU Core数量比较充足,而且分配到的task数量比较合理,那么可以比较快速和高效地执行完这些task线程


• 第三块:让RDD持久化时使用,默认占executor总内存的60%


二、开发调优


af7f140671665c0ee4fcf523b4d40297.png

f181bc964e12e845b75f8b16b8fa8262.png



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

– 对同一份数据,只应该创建一个RDD,不能创建多个RDD来代表同一份数据


– 极大浪费内存

image.png


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

– 比如:一个RDD数据格式是key-value,另一个是单独value类型,这两个RDD的value部分完


全一样,这样可以复用达到减少算子执行次数

image.png


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

– 每次对一个RDD执行一个算子操作时,都会重新从源头处理计算一遍,计算出那个RDD出来,然后进一步操作,这种方式性能很差


– 对多次使用的RDD进行持久化,将RDD的数据保存在内存或磁盘中,避免重复劳动


– 借助cache()和persist()方法

image.png


持久化级别:默认persist()

image.png

image.png



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

– 在spark作业运行过程中,最消耗性能的地方就是shuffle过程


– 将分布在集群中多个节点上的同一个key,拉取到同一个节点上,进行聚合和join处理,比如


groupByKey(下图一)、reduceByKey、join(下图二)等算子,都会触发shuffle

image.png

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

– 一定要使用shuffle的,无法用map类算子替代的,那么尽量使用map-site预聚合的算子


– 思想类似MapReduce中的Combiner


– 可能的情况下使用reduceByKey或aggregateByKey算子替代groupByKey算子,因为


reduceByKey或aggregateByKey算子会使用用户自定义的函数对每个节点本地相同的key进行


预聚合,而groupByKey算子不会预聚合

image.png


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

– Kryo是一个序列化类库,来优化序列化和反序列化性能


– Spark默认使用Java序列化机制(ObjectOutputStream/ ObjectInputStream API)进行序列


化和反序列化


– Spark支持使用Kryo序列化库,性能比Java序列化库高很多,10倍左右

image.png




目录
相关文章
|
10月前
|
分布式计算 并行计算 Spark
|
SQL 数据采集 存储
工作经验分享:Spark调优【优化后性能提升1200%】
工作经验分享:Spark调优【优化后性能提升1200%】
828 1
工作经验分享:Spark调优【优化后性能提升1200%】
|
存储 分布式计算 资源调度
Spark on k8s 在阿里云 EMR 的优化实践
本文整理自阿里云技术专家范佚伦在7月17日阿里云数据湖技术专场交流会的分享。
Spark on k8s 在阿里云 EMR 的优化实践
|
分布式计算 Spark
【Spark 调优】Spark 开发调优的十大原则
【Spark 调优】Spark 开发调优的十大原则
179 0
【Spark 调优】Spark 开发调优的十大原则
|
SQL 分布式计算 HIVE
SPARK统计信息的来源-通过优化规则来分析
SPARK统计信息的来源-通过优化规则来分析
517 0
SPARK统计信息的来源-通过优化规则来分析
|
分布式计算 大数据 Spark
Spark 算子详解及优化4| 学习笔记
快速学习 Spark 算子详解及优化4
|
分布式计算 大数据 Spark
Spark 资源和数据并行度优化分析3 | 学习笔记
快速学习 Spark 资源和数据并行度优化分析3
105 0
|
分布式计算 Hadoop 大数据
Spark 算子详解及优化1 | 学习笔记
快速学习 Spark 算子详解及优化1
170 0
|
SQL 分布式计算 大数据
「Spark从精通到重新入门(一)」Spark 中不可不知的动态优化
Apache Spark 自 2010 年面世,到现在已经发展为大数据批计算的首选引擎。而在 2020 年 6 月份发布的Spark 3.0 版本也是 Spark 有史以来最大的 Release,其中将近一半的 issue 都属于 SparkSQL。这也迎合我们现在的主要场景(90% 是 SQL),同时也是优化痛点和主要功能点。我们 Erda 的 FDP 平台(Fast Data Platform)也从 Spark 2.4 升级到 Spark 3.0 并做了一系列的相关优化,本文将主要结合 Spark 3.0 版本进行探讨研究。
227 0
「Spark从精通到重新入门(一)」Spark 中不可不知的动态优化
|
SQL 存储 机器学习/深度学习
基于英特尔® 优化分析包(OAP)的 Spark 性能优化方案
Spark SQL 作为 Spark 用来处理结构化数据的一个基本模块,已经成为多数企业构建大数据应用的重要选择。但是,在大规模连接(Join)、聚合(Aggregate)等工作负载下,Spark 性能会面临稳定性和性能方面的挑战。
基于英特尔® 优化分析包(OAP)的 Spark 性能优化方案