【场景】

  Spark提交作业job的时候要指定该job可以使用的CPU、内存等资源参数,生产环境中,任务资源分配不足会导致该job执行中断、失败等问题,所以对Spark的job资源参数分配调优非常重要。

  spark提交作业,yarn-cluster模式示例:

  ./bin/spark-submit\

  --class com.ww.rdd.wordcount \

  --master yarn \

  --deploy-mode cluster \ 
  --executor-memory 4G \
  --num-executors 50 \

  --driver-memory 1G \

  --conf spark.default.parallelism=1000 \

  --conf spark.memory.fraction=0.75 \

  --conf spark.memory.storageFraction=0.5 \

  /home/spark/wordcount.jar \
  1000  #入参

【参数】

num-executors

  参数说明:该参数用于设置每个Spark作业总共要用多少个Executor进程来执行。例如Driver向YARN集群管理器申请资源时,YARN集群管理器会尽可能按照该配置在集群的各个worker节点上启动相应数量的Executor进程。这个参数非常重要,如果不设置的话,Spark默认只启动少量的Executor进程,意味着该Spark作业并行度不足,如果作业计算多、数据很大,会导致运行速度非常慢甚至资源不足,异常中断,无法完成等。

  调优建议num-executors设置太少或太多的Executor进程都不好。设置的太少,无法充分利用集群资源;设置的太多的话,大部分队列可能无法给予充分的资源。生产环境摸索的经验是每个Spark作业的运行一般设置50~100个左右的Executor进程比较合适。

executor-memory

  参数说明:该参数用于设置每个Executor进程的内存。Executor内存的大小,很多时候直接决定了Spark作业的性能,而且跟常见的JVM OOM异常,也有直接的关系。

  调优建议:如果内存资源充足的前提下,一般每个job给每个Executor进程的内存设置4G~8G较为合适,供参考。具体的设置还得根据Spark集群可以占用的内存资源总量来定。num-executors * executor-memory,是本Spark作业申请到的内存资源量,这个值是不能超过Spark集群可以占用的内存资源总量的。

executor-cores

  参数说明:该参数用于设置每个Executor进程的CPU cores数量。这个参数决定了每个Executor进程并行执行task线程的能力。因为每个CPU core同一时间只能执行一个task线程,因此每个Executor进程的CPU cores数量越多,越能够快速地并行执行完分配给自己的所有task线程。

  调优建议:如果CPU核数资源充足的前提下,一般每个job给每个Executor的CPU core数量设置为2~4个较为合适,供参考。具体的设置还得根据Spark集群可以占用的CPU core数量资源总量来定。num-executors * executor-cores,是本Spark作业申请到的CPU core数量,这个值是不能超过Spark集群可以占用的CPU core数量资源总量的。

driver-memory

  参数说明:该参数用于设置Driver进程的内存。

  调优建议Driver的内存通常来说不设置,或者设置1G左右应该就够了。唯一需要注意的一点是,如果需要使用collect算子将RDD的数据全部拉取到Driver上进行处理,那么必须确保Driver的内存足够大,否则会出现OOM内存溢出的问题。

spark.default.parallelism

  参数说明该参数用于设置每个stage的默认task数量。这个参数极为重要,如果不设置可能会直接影响Spark作业性能。

  调优建议如果不设置这个参数,会导致Spark自己根据底层HDFS的block数量来设置task的数量,默认是一个HDFS block对应一个task。通常来说,Spark默认设置的数量是偏少的(比如就几十个task),如果task数量偏少的话,就会导致你前面设置好的Executor的参数都前功尽弃。试想一下,无论Executor进程有多少个,内存和CPU资源分配有多充足,但是task只有1个或者10个,那么90%的Executor进程可能根本就没有task执行,也就是白白浪费了宝贵的内存和CPU资源!因此Spark官网建议的设置原则是,设置该参数为num-executors * executor-cores的2~3倍较为合适,例如,Executor的总CPU core数量为300个,那么设置1000个task是可以的,此时可以充分地利用Spark集群的资源,也就是说,1个cpu core并发跑2~3个task是较为合适的。

spark.memory.fractionspark.memory.storageFraction

  参数说明和调优建议:参见我的另外一篇文章  【Spark调优】内存模型与参数调优

  下一篇:【Spark调优】Broadcast广播变量

  上一篇:【Spark调优】Kryo序列化

【Spark调优】提交job资源参数调优的更多相关文章

  1. spark 资源参数调优

    资源参数调优 了解完了Spark作业运行的基本原理之后,对资源相关的参数就容易理解了.所谓的Spark资源参数调优,其实主要就是对Spark运行过程中各个使用资源的地方,通过调节各种参数,来优化资源使 ...

  2. 【Spark篇】---Spark中内存管理和Shuffle参数调优

    一.前述 Spark内存管理 Spark执行应用程序时,Spark集群会启动Driver和Executor两种JVM进程,Driver负责创建SparkContext上下文,提交任务,task的分发等 ...

  3. hive 调优(二)参数调优汇总

    在hive调优(一) 中说了一些常见的调优,但是觉得参数涉及不多,补充如下 1.设置合理solt数 mapred.tasktracker.map.tasks.maximum 每个tasktracker ...

  4. 【深度学习篇】--神经网络中的调优一,超参数调优和Early_Stopping

    一.前述 调优对于模型训练速度,准确率方面至关重要,所以本文对神经网络中的调优做一个总结. 二.神经网络超参数调优 1.适当调整隐藏层数对于许多问题,你可以开始只用一个隐藏层,就可以获得不错的结果,比 ...

  5. spark submit参数调优

    在开发完Spark作业之后,就该为作业配置合适的资源了.Spark的资源参数,基本都可以在spark-submit命令中作为参数设置.很多Spark初学者,通常不知道该设置哪些必要的参数,以及如何设置 ...

  6. Spark Shuffle原理、Shuffle操作问题解决和参数调优

    摘要: 1 shuffle原理 1.1 mapreduce的shuffle原理 1.1.1 map task端操作 1.1.2 reduce task端操作 1.2 spark现在的SortShuff ...

  7. 1,Spark参数调优

    Spark调优 目录 Spark调优 一.代码规范 1.1 避免创建重复RDD 1.2 尽量复用同一个RDD 1.3 多次使用的RDD要持久化 1.4 使用高性能算子 1.5 好习惯 二.参数调优 资 ...

  8. spark参数调优

    摘要 1.num-executors 2.executor-memory 3.executor-cores 4.driver-memory 5.spark.default.parallelism 6. ...

  9. [Spark性能调优] 第一章:性能调优的本质、Spark资源使用原理和调优要点分析

    本課主題 大数据性能调优的本质 Spark 性能调优要点分析 Spark 资源使用原理流程 Spark 资源调优最佳实战 Spark 更高性能的算子 引言 我们谈大数据性能调优,到底在谈什么,它的本质 ...

随机推荐

  1. C# 模拟键盘操作SendKey(),SendKeys()

    模拟键盘输入就是使用以下2个语法实现的. SendKeys.Send(string keys);  //模拟汉字(文本)输入SendKeys.SendWait(string keys); //模拟按键 ...

  2. 从分布式一致性到共识机制(二)Raft算法

    春秋五霸说开 春秋五霸,是指东周春秋时期相继称霸主的五个诸侯,“霸”,意为霸主,即是诸侯之领袖.典型的比如齐桓公,晋文公,春秋时期诸侯国的称霸,与今天要讨论的Raft算法很像. 一.更加直观的Raft ...

  3. get_k_data 接口文档 全新的免费行情数据接口

    get_k_data 接口文档 全新的免费行情数据接口 原创: Jimmy 挖地兔 2016-11-06 前言在tushareAPI里,曾经被用户喜欢和作为典范使用的API get_hist_data ...

  4. js过滤html标签

    function deleteHtmlTag(str){ str = str.replace(/<[^>]+>|&[^>]+;/g,"").trim ...

  5. 课堂小记---JavaScript(2)

    本阶段难点疑点梳理 1.关于switch中default的使用: default同case功能一样,区别在于并不匹配任何信息,只有当case中无任何匹配的时候才会执行default.需要注意的是,这是 ...

  6. Centos发布java的war包后,无法访问发布的工程

    分析: 这时候,看你的开启的端口,8080,3306都能访问的话,那么就是你的地址写错了,可是,经测试,c3p0中的web地址是正确的,那么就去看linux中的tomcat的日志文件再tomcat/l ...

  7. 爬虫之正则和xpath

    一.正解解析 常用正则表达式回顾: 单字符: . : 除换行以外所有字符 [] :[aoe] [a-w] 匹配集合中任意一个字符 \d :数字 [-] \D : 非数字 \w :数字.字母.下划线.中 ...

  8. <算法图解>读书笔记:第1章 算法简介

    阅读书籍:[美]Aditya Bhargava◎著 袁国忠◎译.人民邮电出版社.<算法图解> 第1章 算法简介 1.2 二分查找 一般而言,对于包含n个元素的列表,用二分查找最多需要\(l ...

  9. 【QT】QApplication简介

    1.QApplication QApplication类管理GUI程序的控制流和主要设置,是基于QWidget的,为此特化了QGuiApplication的一些功能,处理QWidget特有的初始化和结 ...

  10. wpa_cli 关联无线网络

    fq关联无线网络,不同的无线网络认证方式不同设置:    1)open(开放式认证方式,分为):         wpa_cli -iwlan0 set_network 0 ssid '"w ...