spark submit参数及调优

spark submit参数及调优

原文地址
spark submit参数介绍
你可以通过spark-submit --help或者spark-shell --help来查看这些参数。
使用格式: 
./bin/spark-submit \
  --class <main-class> \
  --master <master-url> \
  --deploy-mode <deploy-mode> \
  --conf <key>=<value> \
  ... # other options
  <application-jar> \
  [application-arguments]
参数名 格式 参数说明
--master MASTER_URL 如spark://host:port, mesos://host:port, yarn,  yarn-cluster,yarn-client, local
--deploy-mode DEPLOY_MODE Client或者master,默认是client
--class CLASS_NAME 应用程序的主类
--name NAME         应用程序的名称
--jars JARS 逗号分隔的本地jar包,包含在driver和executor的classpath下
--packages 包含在driver和executor的classpath下的jar包逗号分隔的”groupId:artifactId:version”列表
--exclude-packages 用逗号分隔的”groupId:artifactId”列表
--repositories 逗号分隔的远程仓库
--py-files PY_FILES 逗号分隔的”.zip”,”.egg”或者“.py”文件,这些文件放在python app的PYTHONPATH下面
--files FILES 逗号分隔的文件,这些文件放在每个executor的工作目录下面
--conf PROP=VALUE 固定的spark配置属性,默认是conf/spark-defaults.conf
--properties-file FILE 加载额外属性的文件
--driver-memory MEM Driver内存,默认1G
--driver-java-options 传给driver的额外的Java选项
--driver-library-path 传给driver的额外的库路径
--driver-class-path 传给driver的额外的类路径
--executor-memory MEM 每个executor的内存,默认是1G
--proxy-user NAME        模拟提交应用程序的用户
--driver-cores NUM        Driver的核数,默认是1。这个参数仅仅在standalone集群deploy模式下使用
--supervise       Driver失败时,重启driver。在mesos或者standalone下使用
--verbose       打印debug信息
--total-executor-cores NUM        所有executor总共的核数。仅仅在mesos或者standalone下使用
--executor-core NUM        每个executor的核数。在yarn或者standalone下使用
--driver-cores NUM        Driver的核数,默认是1。在yarn集群模式下使用
--queue QUEUE_NAME 队列名称。在yarn下使用
--num-executors NUM 启动的executor数量。默认为2。在yarn下使用
试例:
# Run application locally on 8 cores(本地模式8核)
./bin/spark-submit \
  --class org.apache.spark.examples.SparkPi \
  --master local[8] \
  /path/to/examples.jar \
  100
# Run on a Spark standalone cluster in client deploy mode(standalone client模式)
./bin/spark-submit \
  --class org.apache.spark.examples.SparkPi \
  --master spark://207.184.161.138:7077 \
  --executor-memory 20G \
  --total-executor-cores 100 \
  /path/to/examples.jar \
  1000
# Run on a Spark standalone cluster in cluster deploy mode with supervise(standalone cluster模式使用supervise)
./bin/spark-submit \
  --class org.apache.spark.examples.SparkPi \
  --master spark://207.184.161.138:7077 \
  --deploy-mode cluster \
  --supervise \
  --executor-memory 20G \
  --total-executor-cores 100 \
  /path/to/examples.jar \
  1000
# Run on a YARN cluster(YARN cluster模式)
export HADOOP_CONF_DIR=XXX
./bin/spark-submit \
  --class org.apache.spark.examples.SparkPi \
  --master yarn \
  --deploy-mode cluster \  # can be client for client mode
  --executor-memory 20G \
  --num-executors 50 \
  /path/to/examples.jar \
  1000
# Run on a Mesos cluster in cluster deploy mode with supervise(Mesos cluster模式使用supervise)
./bin/spark-submit \
  --class org.apache.spark.examples.SparkPi \
  --master mesos://207.184.161.138:7077 \
  --deploy-mode cluster \
  --supervise \
  --executor-memory 20G \
  --total-executor-cores 100 \
  http://path/to/examples.jar \
  1000


—————————————————————————————————————————————————————————————
在公司使用最多的是spark on yarn模式,下面主要讲spark on yarn
资源参数调优
所谓的Spark资源参数调优,其实主要就是对Spark运行过程中各个使用资源的地方,通过调节各种参数,来优化资源使用的效率,从而提升Spark作业的执行性能。
以下参数就是Spark中主要的资源参数,每个参数都对应着作业运行原理中的某个部分,我们同时也给出了一个调优的参考值。
1、num-executors
参数说明:
该参数用于设置Spark作业总共要用多少个Executor进程来执行。Driver在向YARN集群管理器申请资源时,YARN集群管理器会尽可能按照你的设置来在
集群的各个工作节点上,启动相应数量的Executor进程。这个参数非常之重要,如果不设置的话,默认只会给你启动少量的Executor进程,此时你的Spark作业的运行速度是非常慢的。
参数调优建议:
每个Spark作业的运行一般设置50~100个左右的Executor进程比较合适,设置太少或太多的Executor进程都不好。设置的太少,无法充分利用集群资源;设置的太多的话,大部分队列可能无法给予充分的资源。
2、executor-memory
参数说明:
该参数用于设置每个Executor进程的内存。Executor内存的大小,很多时候直接决定了Spark作业的性能,而且跟常见的JVM OOM异常,也有直接的关联。
参数调优建议:
每个Executor进程的内存设置4G~8G较为合适。但是这只是一个参考值,具体的设置还是得根据不同部门的资源队列来定。可以看看自己团队的资源队列的最大内存限制是多少,num-executors乘以executor-memory,是不能超过队列的最大内存量的。此外,如果你是跟团队里其他人共享这个资源队列,那么申请的内存量最好不要超过资源队列最大总内存的1/3~1/2,避免你自己的Spark作业占用了队列所有的资源,导致别的同学的作业无法运行。
3、executor-cores
参数说明:
该参数用于设置每个Executor进程的CPU core数量。这个参数决定了每个Executor进程并行执行task线程的能力。因为每个CPU core同一时间只能执行一个task线程,因此每个Executor进程的CPU core数量越多,越能够快速地执行完分配给自己的所有task线程。
参数调优建议:
Executor的CPU core数量设置为2~4个较为合适。同样得根据不同部门的资源队列来定,可以看看自己的资源队列的最大CPU core限制是多少,再依据设置的Executor数量,来决定每个Executor进程可以分配到几个CPU core。同样建议,如果是跟他人共享这个队列,那么num-executors * executor-cores不要超过队列总CPU core的1/3~1/2左右比较合适,也是避免影响其他同学的作业运行。
4、driver-memory
参数说明:
该参数用于设置Driver进程的内存。
参数调优建议:
Driver的内存通常来说不设置,或者设置1G左右应该就够了。唯一需要注意的一点是,如果需要使用collect算子将RDD的数据全部拉取到Driver上进行处理,那么必须确保Driver的内存足够大,否则会出现OOM内存溢出的问题。
5、spark.default.parallelism
参数说明:
该参数用于设置每个stage的默认task数量。这个参数极为重要,如果不设置可能会直接影响你的Spark作业性能。
参数调优建议:
Spark作业的默认task数量为500~1000个较为合适。很多同学常犯的一个错误就是不去设置这个参数,那么此时就会导致Spark自己根据底层HDFS的block数量来设置task的数量,默认是一个HDFS block对应一个task。通常来说,Spark默认设置的数量是偏少的(比如就几十个task),如果task数量偏少的话,就会导致你前面设置好的Executor的参数都前功尽弃。试想一下,无论你的Executor进程有多少个,内存和CPU有多大,但是task只有1个或者10个,那么90%的Executor进程可能根本就没有task执行,也就是白白浪费了资源!因此Spark官网建议的设置原则是,设置该参数为num-executors * executor-cores的2~3倍较为合适,比如Executor的总CPU core数量为300个,那么设置1000个task是可以的,此时可以充分地利用Spark集群的资源。
6、spark.storage.memoryFraction
参数说明:
该参数用于设置RDD持久化数据在Executor内存中能占的比例,默认是0.6。也就是说,默认Executor 60%的内存,可以用来保存持久化的RDD数据。根据你选择的不同的持久化策略,如果内存不够时,可能数据就不会持久化,或者数据会写入磁盘。
参数调优建议:
如果Spark作业中,有较多的RDD持久化操作,该参数的值可以适当提高一些,保证持久化的数据能够容纳在内存中。避免内存不够缓存所有的数据,导致数据只能写入磁盘中,降低了性能。但是如果Spark作业中的shuffle类操作比较多,而持久化操作比较少,那么这个参数的值适当降低一些比较合适。此外,如果发现作业由于频繁的gc导致运行缓慢(通过spark web ui可以观察到作业的gc耗时),意味着task执行用户代码的内存不够用,那么同样建议调低这个参数的值。
7、spark.shuffle.memoryFraction
参数说明:
该参数用于设置shuffle过程中一个task拉取到上个stage的task的输出后,进行聚合操作时能够使用的Executor内存的比例,默认是0.2。也就是说,Executor默认只有20%的内存用来进行该操作。shuffle操作在进行聚合时,如果发现使用的内存超出了这个20%的限制,那么多余的数据就会溢写到磁盘文件中去,此时就会极大地降低性能。
参数调优建议:
如果Spark作业中的RDD持久化操作较少,shuffle操作较多时,建议降低持久化操作的内存占比,提高shuffle操作的内存占比比例,避免shuffle过程中数据过多时内存不够用,必须溢写到磁盘上,降低了性能。此外,如果发现作业由于频繁的gc导致运行缓慢,意味着task执行用户代码的内存不够用,那么同样建议调低这个参数的值。
资源参数的调优,没有一个固定的值,需要根据自己的实际情况(包括Spark作业中的shuffle操作数量、RDD持久化操作数量以及spark web ui中显示的作业gc情况),合理地设置上述参数。
资源参数参考示例
以下是一份spark-submit命令的示例,大家可以参考一下,并根据自己的实际情况进行调节:
./bin/spark-submit \
  --master yarn-cluster \
  --num-executors 100 \
  --executor-memory 6G \
  --executor-cores 4 \
  --driver-memory 1G \
  --conf spark.default.parallelism=1000 \
  --conf spark.storage.memoryFraction=0.5 \
  --conf spark.shuffle.memoryFraction=0.3 \


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/326048.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2020蓝桥杯省赛---java---A---4(七段码)

题目描述 思路分析 代码实现 package lanqiao;public class Main {public static int N10;public static int e[][]new int[N][N];//存储二极管相邻的信息public static int f[]new int[N];//并查集public static int ans0;public static boolean st[]new boolean[N];//true表…

小米无线路由器服务器用户名和密码忘了,小米路由器管理密码忘记了怎么办?...

问&#xff1a;小米路由器管理密码忘记了怎么办&#xff1f;我想修改小米路由器上的配置&#xff0c;在打开miwifi.com的时候&#xff0c;提示需要输入管理密码。但是&#xff0c;我不知道管理密码是多少&#xff0c;忘记了管理密码应该怎么办&#xff1f;答&#xff1a;首先说…

asp.net core源码飘香:Options组件

简介&#xff1a; Options组件是一个小组件&#xff0c;但用的地方很多。它本质是将一个POCO类注册到容器中&#xff08;主要在Startup中作为其他组件的配置功能提供&#xff09;&#xff0c;后续使用的时候就可以通过比如构造函数注入等获取到POCO对象。如果只是为了注入一个P…

DevOps面试问题

转载自 DevOps面试问题 DevOps是一组过程、方法与系统的统称&#xff0c;用于促进开发&#xff08;应用程序/软件工程&#xff09;、技术运营和质量保障&#xff08;QA&#xff09;部门之间的沟通、协作与整合。下面为大家分享DevOps系列的面试问题 持续整合问题 问题一&a…

第五章循环结构(一)

一、while循环&#xff1a; 1.语法&#xff1a;while(循环条件){ //循环操作 } 2.循环条件是一个bolean类型的结果。 3.特点&#xff1a;先判断&#xff0c;后执行&#xff01; 二、程序调试&#xff1a; 1.步骤&#xff1a; 设置断点 单步运行 观察变量 三、 1.i2 等价于ii2; …

bui ajax,BUI 数据交互

BUI里面有3种数据交互.数据请求bui.ajax(option)数据请求 bui.ajax API 数据请求的跨域处理,请查看调试章节.参数: option 是一个对象option.urlType: stringDetail: url地址option.dataType: objectDetail: 请求的参数,默认:{}option.methodType: stringDetail: 默认: GET示例…

SparkSQL性能优化

SparkSQL性能优化 1、设置shuffle过程中的并行度,可以通过spark.sql.shuffle.partitions设置shuffle并行度。&#xff08;在SQLContext.setConf&#xff08;&#xff09;中设置&#xff09;。 2、Hive数据仓库创建的时候&#xff0c;合理设置数据类型&#xff0c;比如设置成I…

微软发布ReactXP:方便开发者构建跨平台应用

说起跨平台开发工具&#xff0c;开发者们最先想到的无外乎是 Cordova 和 Xamarin。但是前者无法提供足够令人满意的性能表现&#xff0c;而后者在 Web 开发上心有余而力不足。所以&#xff0c;微软 Skype 团队基于 React JS 和 React Native 开发了一款全新的跨平台开发工具 —…

2020蓝桥杯省赛---java---A---10( 字串排序)

题目描述 思路分析 set去重 代码实现 package lanqiao;import java.util.*; public class Main {public static Set<String> setnew TreeSet<>();public static void main(String[] args) {Scanner scanner new Scanner(System.in);while (scanner.hasNextLine…

jQuery操作DOM元素案例

直接打开注释即可观察效果&#xff0c;都已经测试通过&#xff01;&#xff01;&#xff01; <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>操作DOM元素</title><script src"js/jquery-1.8.3.js" ty…

这些面试中的智力题,你都会了吗

转载自 这些面试中的智力题&#xff0c;你都会了吗 1. 给一个瞎子52张扑克牌&#xff0c;并告诉他里面恰好有10张牌是正面朝上的。要求这个瞎子把牌分成两堆&#xff0c;使得每堆牌里正面朝上的牌的张数一样多。瞎子应该怎么做&#xff1f; 2. 如何用一枚硬币等概率地产生一…

服务器登陆显示其他用户,连接远程服务器显示其他用户

连接远程服务器显示其他用户 内容精选换一换云服务器网络异常、防火墙未放行本地远程桌面端口、云服务器CPU负载过高等场景均可能导致云服务器无法正常登录。本节操作介绍无法登录Linux弹性云服务器的排查思路。当您的云服务器无法远程登录时&#xff0c;我们建议您首先检查是否…

第6章循环结构(二)

一、for循环 1.语法&#xff1a; for(初始化变量并赋值;循环条件;循环迭代){ //循环操作 } eg&#xff1a; for(int i 0;i<100;i){ System.out.print(“好好学习&#xff0c;天天向上”); } 2.执行顺序&#xff1a; &#xff08;1&#xff09;先执行初始化变量并赋值 &…

每日top3热点搜索词统计案例

数据格式&#xff1a; 日期&#xff0c;用户&#xff0c;搜索词&#xff0c;平台&#xff0c;版本 需求&#xff1a; 1、筛选出符合条件&#xff08;城市&#xff0c;平台&#xff0c;版本&#xff09;的数据 2、统计每天搜索uv排名前三的搜索词 3、按照每天的top3搜索词的uv搜…

2019蓝桥杯省赛---java---A---4(迷宫)

题目描述 【问题描述】 下图给出了一个迷宫的平面图&#xff0c;其中标记为 1 的为障碍&#xff0c;标记为 0 的为可以通行的地方。 010000 000100 001001 110000 迷宫的入口为左上角&#xff0c;出口为右下角&#xff0c;在迷宫中&#xff0c;只能从一个位置走到这个它的上、…

面试官最爱问的并发问题

转载自 面试官最爱问的并发问题 在Java相关的岗位面试中&#xff0c;很多面试官都喜欢考察面试者对Java并发的了解程度&#xff0c;而以volatile关键字作为一个小的切入点&#xff0c;往往可以一问到底&#xff0c;把Java内存模型&#xff08;JMM&#xff09;&#xff0c;Jav…

西瓜显示服务器错误,西瓜云服务器

西瓜云服务器 内容精选换一换云服务器组是对云服务器的一种逻辑划分&#xff0c;云服务器组中的弹性云服务器遵从同一策略。当前仅支持反亲和性&#xff0c;即同一云服务器组中的弹性云服务器分散地创建在不同的主机上&#xff0c;提高业务的可靠性。您可以使用云服务器组将业务…

第四章使用jQuery操作DOM元素

一、DOM的分类&#xff1a; 1.DOM core 2.HTML-DOM 3.CSS-DOM 二、css操作 语法&#xff1a; $("#div1").css(“color”,“red”); $("#div1").css({“color”:“red”,“margin”:“5px”}); //添加样式 $("#div1").addClass(“div1_style”); …

30分钟掌握 C#6

1. 只读自动属性&#xff08;Read-only auto-properties&#xff09; C# 6之前我们构建只读自动属性&#xff1a; public string FirstName { get; private set; } public string LastName { get; private set; } 原理解析&#xff1a;就是编译器在生成set访问器时&#xff0c…

2019蓝桥杯省赛---java---A---6(完全二叉树的权值)

题目描述 思路分析 等差数列 代码实现 package lanqiao;import java.util.*; public class Main {public static void main(final String[] args) {Scanner sc new Scanner(System.in);int nsc.nextInt();int[]numsnew int[n1];long maxSum0;int minDeepInteger.MAX_VALUE;…