首页 > 其他 > 详细

spark调优

时间:2018-10-19 01:08:24      阅读:142      评论:0      收藏:0      [点我收藏+]

  开发调优和资源调优是所有spark作业都要注意和遵循的基本原则,是高性能spark作业的基础;数据倾斜调优,主要解决spark作业数据倾斜的;shuffle调优,对spark作业的shuffle运行过程以及细节进行调优

1、开发调优

  1、对于同一份数据如hive表,hdfs文件,只应该创建一个RDD,不能创建对个RDD代表同一份数据,在开发过程应该避免重复创建,否 则重复计算,增作业性能开销

  2、尽可能复用同一个RDD,对于多个RDD的数据有重叠或包含的情况,应尽量复用一个RDD,减少RDD数量,减少算子执行的次数

  3、对多次使用的RDD进行持久化:第一步优化,尽可能复用RDD,第二步优化,对一个RDD执行多次算子操作时,这个RDD本身仅被计算一次。spark中每次对一个RDD执行一个算子操作时,都会从源头计算一遍,性能很差。因此,对该RDD进行持久化,将RDD数据保存到内存或磁盘。cache()方法:使用非序列化方式将RDD数据全部尝试持久化到内存,persist()手动选择持久化级别

  4、尽量避免使用shuffle类算子,spark作业运行过程中,最消耗性能的地方是shuffle过程,大量磁盘io和数据网络传输操作导致性能较差

  5、使用map-side预聚合的shuffle操作

  6、使用高性能算子:reduceByKey和aggregateByKey替代groupByKey;使用mapPartiton替代map;使用foreachPartition替换foreach;使用filter之后进行coalesce;使用reparationAndSortWithinPartitions替代reparation后+sort

  7、广播大变量:如100m以上的大集合

  8、使用kryo优化序列化性能

  9、优化数据结构:java中三类类型好内存,对象、字符串、集合类型,因此尽量用字符串替换对象,原始类型替换字符串,数组替换集合类型,尽可能减少内存占用,降低GC频率

 

2、资源调优

  spark资源参数可在spark-submit中设置

  1、num-executors:执行器个数,每个spark作业运行一般设置50-100个执行器进程

  2、executor-memory:每个执行器内存,4-8G

  3、executor-cores:每个执行器核数,每个执行器并行执行task的能力 2-4

  4、driver-memory:driver进程内存,1G,如果有collect算子将RDD数据全拉取到Driver处理,需要加大driver内存

  5、spark.default.parallelism:设置每个stage默认的task数量 500-1000

  6、spark.storage.meoryFraction:Rdd持久化数据在执行器内存中能占的比例,默认0.6

  7、spark.shuffle.memoryFraction:shuffle过程中一个task拉取到上个stage的task的输出后,进行聚合操作时能使用执行器内存的比例,默认0.2

 

3、数据倾斜调优

4、shuffle调优

spark调优

原文:https://www.cnblogs.com/lybpy/p/9813736.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!