spark调优

原创 2018年04月15日 20:34:44

1.代码调优:

  1. 避免创建重复的RDD
  2. 复用同一个RDD
  3. 对多次使用的RDD进行持久化
  4. 如何选择一种最合适的持久化策略呢?
  5. 答: cache--MEMORY_ONLY;  persist:MEMORY_ONLY,MEMORY_ONLY_SER,MEMORY_AND_DISK_SER
  6. checkpoint:如果一个RDD的计算时间比较长或者计算起来比较复杂。一般将这个RDD的计算结果保存到HDFS上,这样数据会更加安全。如果一个RDD的依赖关系非常长,也会使用checkpoint,切断依赖关系,提高容错的效率。
  7. 避免使用shuffle类的算子
  8. 可以使用广播变量+filter,广播变量+map,广播变量+flatMap 来替换join算子
  9. 使用map-side预聚合的shuffle类算子:如reduceByKey. aggregateByKey  combineByKey
  10. 尽量使用高性能的算子: 使用reduceByKey 替代  groupByKey 使用mapPartition替代map 使用foreachPartition替代foreach 。filter后使用coalesce减少分区
  11. 使用 Kryo优化序列化性 Sparkconf.set("spark.serializer","org.apache.spark.serializer.KryoSerializer").registerKryoClasses(new Class[]{SpeedSortKey.class})
  12. 数据本地化的级别:PROCESS_LOCAL:task计算的数据在本进程(executor)的内存中。NODE_LOCAL:task所计算的数据在本节点所在的磁盘上,或者task所计算的数据在本节点其他executor进行的内存中。NO_PREF:task所计算的:数据在关系型数据库中。RACK_LOCAL:task所计算的数据在同机架的不同节点的磁盘或者executor进进程的内存中。Any:跨机架。

    Spark中任务调度时,TaskScheduler在分发之前需要依据数据的位置来分发,最好将task分发到数据所在的节点上,如果TaskScheduler分发的task在默认3s依然无法执行的话,TaskScheduler会重新发送这个task到相同的Executor中去执行,会重试5次,如果依然无法执行,那么TaskScheduler会降低一级数据本地化的级别再次发送task。

    如上图中,会先尝试1,PROCESS_LOCAL数据本地化级别,如果重试5次每次等待3s,会默认这个Executor计算资源满了,那么会降低一级数据本地化级别到2,NODE_LOCAL,如果还是重试5次每次等待3s还是失败,那么还是会降低一级数据本地化级别到3,RACK_LOCAL。这样数据就会有网络传输,降低了执行效率。如何提高数据本地化的级别?答:可以增加每次发送task的等待时间(默认都是3s),将3s倍数调大。具体的一些参数名: spark.locality.wait ; spark.locality.wait.process(针对PROCESS_LOCAL级别); spark.locality.wait.node(针对NODE_LOCAL级别);  spark.locality.wait.rack(针对RACK_LOCAL级别)

    13. spark shuffle调优

                buffer大小; shuffle read拉取数据量的大小; shuffle聚合内存的比例; 拉取数据重试的次数;

                重试间隔时间; spark shuffle的种类;





版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wyn1175397098zt/article/details/79952244

Spark性能优化第五季-数据本地性调优

一:Spark性能调优之序列化 1、序列化最重要的原因是内存空间有限(减少GC的压力,最大化避免Full GC的产生,因为一旦产生Full GC,则整个Task处于停止状态!)、减少磁盘IO的压力、减...
  • NASAXK
  • NASAXK
  • 2016-03-20 14:35:57
  • 2040

Spark的任务调度

本文尝试从源码层面梳理Spark在任务调度与资源分配上的做法。
  • zbf8441372
  • zbf8441372
  • 2014-12-11 15:03:15
  • 12813

Spark性能调优-总结分享

1、Spark调优背景 目前Zeppelin已经上线一段时间,Spark作为底层SQL执行引擎,需要进行整体性能调优,来提高SQL查询效率。本文主要给出调优的结论,因为涉及参数很多,故没有很细粒...
  • xgjianstart
  • xgjianstart
  • 2017-08-01 18:01:25
  • 1390

spark性能优化:高级篇(数据倾斜调优,shuffle调优)

原文链接:http://tech.meituan.com/spark-tuning-pro.html 前言 继基础篇讲解了每个Spark开发人员都必须熟知的开发调优与资源调优之后,本文作为《S...
  • qiuhui19941118
  • qiuhui19941118
  • 2017-03-06 22:59:04
  • 604

Spark调优(数据序列化和内存调优)

翻译自Spark官网文档:https://spark.apache.org/docs/2.1.0/tuning.html 前言     由于大多数Spark计算的内存使用特性,...
  • junerli
  • junerli
  • 2017-12-06 11:44:21
  • 367

Spark性能优化:开发调优篇

前言 在大数据计算领域,Spark已经成为了越来越流行、越来越受欢迎的计算平台之一。Spark的功能涵盖了大数据领域的离线批处理、SQL类处理、流式/实时计算、机器学习、图计算等各种不同类型的计算操作...
  • u012102306
  • u012102306
  • 2016-05-05 13:36:34
  • 20808

[Spark2.0]ML 调优:模型选择和超参数调优

本节讲述如何使用MLlib提供的工具来对ML算法和Pipline进行调优。内建的交叉验证和其他工具允许用户在算法和Pipline中优化超参数。     模型选择(又名 超参数调优)         在...
  • yhao2014
  • yhao2014
  • 2016-08-20 01:13:08
  • 3072

spark调优指导

  • 2016年07月21日 13:19
  • 2.41MB
  • 下载

Spark调优-参数及配置

参数调优 1 资源类 11 num-executors 12 executor-memory 13 executor-cores 14 driver-memory 15 sparkdefaultpar...
  • NJZhuJinhua
  • NJZhuJinhua
  • 2018-01-10 23:51:30
  • 266

SparkML模型选择(超参数调整)与调优

Spark ML模型选择与调优本文主要讲解如何使用Spark MLlib的工具去调优ML算法和Pipelines。内置的交叉验证和其他工具允许用户优化算法和管道中的超参数。模型选择(又称为超参数调整)...
  • rlnLo2pNEfx9c
  • rlnLo2pNEfx9c
  • 2017-12-10 00:00:00
  • 502
收藏助手
不良信息举报
您举报文章:spark调优
举报原因:
原因补充:

(最多只允许输入30个字)