提交申请

spark的bin目录中的spark submit脚本用于在集群上启动应用程序。它可以通过一个统一的接口使用Spark支持的所有集群管理器,这样您就不必特别为每个集群管理器配置应用程序。

捆绑应用程序的依赖项

如果代码依赖于其他项目,则需要将它们与应用程序一起打包,以便将代码分发到Spark集群。为此,创建一个包含代码及其依赖项的程序集jar(或“uber”jar)。sbt和Maven都有汇编插件。创建程序集jar时,将Spark和Hadoop列为提供的依赖项;这些依赖项不需要绑定,因为它们是由集群管理器在运行时提供的。一旦有了一个组装好的jar,就可以在传递jar时调用bin/spark提交脚本,如图所示。

对于Python,可以使用spark-submit的--py-files参数增加.py、.zip.egg 文件与应用程序一块被分发。如果依赖多个Python文件,建议将它们打包到.zip或中.egg

使用spark submit启动应用程序

捆绑用户应用程序后,可以使用bin/spark-submit提交脚本启动它。此脚本负责使用Spark及其依赖项设置路径,并且可以支持Spark支持的不同群集管理器和部署模式:

./bin/spark-submit \--class <main-class> \--master <master-url> \--deploy-mode <deploy-mode> \--conf <key>=<value> \... # other options<application-jar> \[application-arguments]

spark-submit 参数详解

在将项目打包之后,可能需要将其提交到大数据平台上去跑,这个时候就涉及到脚本处理。这里主要是有关spark的运行任务…一些常用的提交参数配置如下所示:

参数名

简介

class

spark程序的主类,仅针对 java 或 scala 应用,注意用  全包名+类名

name 应用程序的名称

master

与deploy-mode合起来表名程序提交到哪个资源管理框架,以何种方式部署。

表示要连接的集群管理器,可 以 是 spark://host:port、mesos://host:port、yarn、yarn-cluster、yarn-client、local。其中local和local[K].这种是本地run的模式,不会提交到YARN,便于测试使用。这两者之间的区别,带K的是多K个线程,不带K的是单个线程。如果是*的话就是尽可能多的线程数。

deploy-mode 在本地 (client) 启动 driver 或在 cluster 上启动,默认是client。client是指driver在提交任务的服务器上执行,cluster是driver和exectutor都在集群内执行
conf 指定 spark 配置属性的值

executor-memory

每个执行器(executor)的内存 ,以字节为单位。可以使用后缀指定更大的单位,比如“512m”(512MB),或“15g”(15GB)。默认是1G,最大不超过30G,yarn模式下其内存加上container要使用的内存(默认值是1G)不要超过NM可用内存,不然分配不到container来运行executor

executor-cores

每个执行器(executor)的核数 ,即单个executor能并发执行task数,根据job设置。在yarn或者standalone下使用。Spark on Yarn 默认为 1,推荐值2-16;standalone 默认为 worker 上所有可用的 core

Executor-memoryOverheadM

设置执行器的堆外内存 ,具体的设置方法可以看之后的spark调优方法.执行器的内存=executor-memory+Executor-overheadMemory

driver-memory

驱动器(Driver)进程使用的内存量 (例如:1000M,5G)。以字节为单位。可以使用后缀指定更大的单位,比如“512m”(512MB),或“15g”(15GB)。默认是1G,推荐值2-6G,不宜太大

driver-cores

驱动器(Driver)的核数 ,默认是1。在 yarn 或者 standalone 下使用

driver-memoryOverheadM

设置driver的堆外内存 ,具体的设置方法可以看之后的spark提交参数详解。driver的内存=driver-memory+driver-overheadMemory

num-executors

设置执行器(executor)的数量;默认为2。在 yarn 下使用。但是目前CDH和FusionInsight都支持动态分配(dynamic allocat)模式。在这种模式下,无论怎么设置num-executors其实都会被忽略的,

queue

执行队列池;通常生产环境都会为特定的租户分配资源池。这个参数便是用于指定跑批租户资源池名称的。

Jars

用逗号分隔的本地 jar 包,指定本次程序(Driver 和 executor)依赖的jar包。需要上传并放到应用的CLASSPATH中的JAR包的列表。如果应用依赖于少量第三方JAR包,可以把他们放在这个参数里,有两种方式:

1、把依赖包打入执行程序包,这样会造成包体较大,每次打包上传耗时间表达;

2、不打入依赖包,把依赖包提前传到服务器,再通过jars指令指出依赖包的文件路径

一种常见的部署方法是从与worker节点物理位置相同的网关机提交应用程序。在此设置中,客户端模式是合适的。在客户端模式下,驱动程序直接在spark submit进程中启动,spark submit进程充当集群的客户端。应用程序的输入和输出连接到控制台。因此,该模式特别适用于涉及REPL的应用(例如Spark shell)。

或者,如果您的应用程序是从远离部署worker节点机器的机器上提交(例如,在本地笔记本电脑上),则通常使用cluster模式来最小化驱动程序和执行程序之间的网络延迟。目前,在独立集群模式中,不支持Python应用程序的cluster模式。

对于Python应用程序,只需在<application jar>而不是jar的位置传递一个.py文件,然后使用 --py-files参数将Python.zip、.egg或.py文件添加到搜索路径。

以下是一些常见选项的示例:

# 本地运行应用程序,8核
./bin/spark-submit \--class org.apache.spark.examples.SparkPi \--master local[8] \/path/to/examples.jar \100# 在Spark独立群集上以客户端部署模式运行
./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# 在Spark独立集群上以集群部署模式运行
./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# 在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# 在Spark独立集群上运行python脚本
./bin/spark-submit \--master spark://207.184.161.138:7077 \examples/src/main/python/pi.py \1000# 以集群部署模式在Mesos集群上运行
./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# 以集群部署模式在Kubernetes集群上运行
./bin/spark-submit \--class org.apache.spark.examples.SparkPi \--master k8s://xx.yy.zz.ww:443 \--deploy-mode cluster \--executor-memory 20G \--num-executors 50 \http://path/to/examples.jar \1000

yarn-client、yarn-cluster

Yarn是hadoop自带的集群管理器,默认情况下不用手动启动。与Spark支持的其他集群管理器(其中在--master 参数中指定了主服务器的地址)不同,在YARN模式下,ResourceManager的地址是从Hadoop配置中提取的。因此,--master参数为yarn。另外Spark on YARN又分为client模式和cluster模式。

具体两者之间区别见另一片文章:spark几种集群管理器总结

这两种模式,最关键的是Spark Application运行时Driver所在的节点不同。

  • yarn-client用于学习及测试,开发不用,因为driver运行在本地客户端,负责调度application,会与yarn集群产生大量的网络通信,从而导致网卡流量激增。好处在于,应用程序运行结果会在客户端显示,直接执行时,本地可以看到所有的log,方便调试。
  • yarn-cluster用于生产环境,因为driver运行在YARN集群NodeManager中,没有网卡流量激增的问题,缺点在于调试不方便,本地用spark-submit提交之后,看不到log,应用的运行结果也不能在客户端显示,查看不方便。

格式:

./bin/spark-submit --class path.to.your.Class --master yarn --deploy-mode cluster [options] <app jar> [app options]

例如

./bin/spark-submit --class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \
--driver-memory 4g \
--executor-memory 2g \
--executor-cores 1 \
--queue thequeue \
examples/jars/spark-examples*.jar \
10

如果要在client模式下启动Spark应用程序,基本类似,但需要将cluster替换为client。下面显示如何在client模式下运行spark shell:

./bin/spark-shell \
--master yarn \
--deploy-mode client

添加其他jars

在cluster模式下,驱动程序运行在与客户端不同的计算机上,因此SparkContext.addJar文件对于客户端本地的文件,将无法开箱即用,为了使客户端上的文件可供SparkContext.addJar使用,在launch命令中需要包含--jars选项。

./bin/spark-submit --class my.main.Class \
--master yarn \
--deploy-mode cluster \
--jars my-other-jar.jar,my-other-other-jar.jar \
my-main-jar.jar \
app_arg1 app_arg2

提交的脚本示例

## yarn、client
spark-submit \
--master yarn \
--deploy-mode client \
/home/hadoop/test.py## yarn、cluster、输入参数
spark-submit \
--master yarn \
--deploy-mode cluster \
--driver-memory 4g \
--executor-memory 2g \
--executor-cores 2 \
--queue prod \
--jars /home/hadoop/mysql-connector-java-8.0.21.jar,/home/hadoop/elasticsearch-spark-20_2.11-6.4.1.jar \
/home/hadoop/test2.py 202012 dd_dksr_hz_test IS_SUC

参考:

Spark-submit参数详解

搞懂spark-submit参数及应用程序提交(详细)相关推荐

  1. spark submit参数及调优

    spark submit参数及调优 原文地址 spark submit参数介绍 你可以通过spark-submit --help或者spark-shell --help来查看这些参数. 使用格式:  ...

  2. spark submit参数及调优(转载)

    spark submit参数介绍 你可以通过spark-submit --help或者spark-shell --help来查看这些参数. 使用格式:  ./bin/spark-submit \--c ...

  3. spark submit参数及调试

    原文:http://www.cnblogs.com/haoyy/p/6893943.html spark submit参数介绍 你可以通过spark-submit --help或者spark-shel ...

  4. Spark:spark submit参数及调优 perfect

    先看下spark运行原理流程: 我们使用spark-submit提交一个Spark作业之后,这个作业就会启动一个对应的Driver进程. 根据你使用的部署模式(deploy-mode)不同,Drive ...

  5. 【SVG】路径<Path>标签详解,一次搞懂所有命令参数

    在上一篇文章 什么是SVG?--SVG快速入门 中我对SVG做了基础的介绍,这篇文章将集中讲解<path>标签 本站链接:什么是SVG?--SVG快速入门_gxyzlxf的博客-CSDN博 ...

  6. 一文搞懂Spark的Task调度器(TaskScheduler)

    TaskScheduler的核心任务是提交TaskSet到集群运算并汇报结果. 为TaskSet创建和维护一个TaskSetManager, 并追踪任务的本地性及错误信息. 遇到Straggle任务会 ...

  7. char类型怎么输入 c语言_还没搞懂C语言指针?这里有最详细的纯干货讲解(附代码)...

    21ic综合自网络信息 指针对于C来说太重要.然而,想要全面理解指针,除了要对C语言有熟练的掌握外,还要有计算机硬件以及操作系统等方方面面的基本知识.所以本文尽可能的通过一篇文章完全讲解指针. 为什么 ...

  8. c语言指针f32*,还没搞懂C语言指针?这里有最详细的纯干货讲解(附代码)

    21ic综合自网络信息 指针对于C来说太重要.然而,想要全面理解指针,除了要对C语言有熟练的掌握外,还要有计算机硬件以及操作系统等方方面面的基本知识.所以本文尽可能的通过一篇文章完全讲解指针. 为什么 ...

  9. 【一篇文章搞懂】25K大牛甩出的超详细面试总结

    1.我往Redis里写的数据怎么没了? 使用Redis的同学你要明白一点,你为什么用Redis?用redis的作用是什么?用redis的好处是什么?凡事多思考一下为什么,多想想背后的原因. 就在不久前 ...

最新文章

  1. Apache Kafka-初体验Kafka(02)-Centos7下搭建单节点kafka_配置参数详解_基本命令实操
  2. 目标检测比赛中的 trick
  3. Mining Precision Interface From Query Logs -- 学习笔记(二)
  4. php购物车修改单价,php – woocommerce在结帐和购物车页面更改价格
  5. 小而全的Pandas使用案例
  6. nginx 反向proxy多个 tomcat,负载均衡
  7. 论文浅尝 | 探索将预训练语言模型用于事件抽取和事件生成
  8. Java工具实现无水印批量下载
  9. spring-mvc笔记1
  10. 牛客 2021年度训练联盟热身训练赛第二场 D题Soccer Standings
  11. php的两种会话技术是,php会话技术主要包含哪些
  12. 认识一个工具 Stopwatch
  13. WPF随笔(十)--使用AvalonDock实现可停靠式布局
  14. epoll监听文件_Go 文件监控怎么实现?
  15. STAR、6W1H、SMART、PDCA、MKASH原则在精准招聘中的应用
  16. 如何做好风险控制,规避项目中的风险
  17. 5.0安装没有costom mysql_MySql5.0安装图解s
  18. Python猜数字项目源代码
  19. 解决一个远程主机强迫关闭连接的bug
  20. .bat文件打开闪退

热门文章

  1. ubantu 后台运行Django
  2. 四大场景、16款新品,TCL从家庭到园区的撒豆成兵...
  3. Oracle TRUNC 函数详解
  4. java bcp,[转] Java BCP 改善
  5. 接口测试 总结(什么是接口测试)
  6. 男子办婚礼邀请同事被举报?本人委屈:23位同事才收礼金4000多块
  7. Android Compatibility
  8. electron结合vue打包后 tray托盘图片路径
  9. 游戏图片推荐格式及压缩方式。TexturePacker、UE4、 贴图合并节约批次、贴图寻址、MipMap(一、参数设置)
  10. 初学者Java自学需要多久?一个月内