启动命令格式:
$ ./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
spark-shell模式
$ ./bin/spark-shell --master yarn --deploy-mode client
添加其他jar依赖
In cluster
mode, the driver runs on a different machine than the client, so SparkContext.addJar
won’t work out of the box with files that are local to the client. To make files on the client available to SparkContext.addJar
, include them with the --jars
option in the launch command.
$ ./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
Property Name | Default | Meaning |
---|---|---|
spark.yarn.am.memory |
512m |
YARN Application Master在client模式下, 使用内存总量,与JVM内存设置格式相同(如:512m,2g)。 如果是cluster模式下,请设置 spark.driver.memory。 注意使用小写的后缀, 如:k、m、g、t、p,分别代表 kibi-, mebi, gibi-, tebi- 以及pebibytes。 |
spark.driver.cores |
1 |
YARN cluster模式下,驱动器使用的CPU core个数。 在cluster模式下,驱动器(driver)和YARN AM(application master)使用相同的JVM,所以这个属性也可以用来控制YARN AM。 如果是client模式下,请使用spark.yarn.am.cores来控制YARN AM的CPU core个数。 |
spark.yarn.am.cores |
1 |
client模式下,用来控制YARN AM的CPU core个数。 cluster模式下,请使用 spark.driver.cores。 |
spark.yarn.am.waitTime |
100s |
在cluster模式下,该属性表示YARN AM等待SparkContext初始化的时间。 在client模式下,该属性表示YARN AM等待驱动器连接的时间。 |
spark.yarn.submit.file |
默认的HDFS副本数(通常是3) | HDFS文件副本数。包括Spark jar,app jar以及其他分布式缓存文件和存档。 |
spark.yarn.preserve |
false |
设为true以保存stage相关文件(stage相关的jar包和缓存)到作业结束,而不是立即删除。 |
spark.yarn.scheduler |
3000 |
Spark AM发送给YARN资源管理器心跳的间隔(ms)。 这个值最多不能超过YARN配置的超时间隔的一半。(yarn.am.liveness-monitor.expiry-interval-ms) |
spark.yarn.scheduler |
200ms |
Spark AM的初始带外心跳间隔(有待定的资源申请时)。 其值不应该大于 spark.yarn.scheduler.heartbeat.interval-ms。 该资源分配间隔会在每次带外心跳成功后但仍有待定资源申请时倍增, 直至达到 spark.yarn.scheduler.heartbeat.interval-ms 所设定的值。 |
spark.yarn.max.executor |
执行器个数*2且不小于3 | Spark应用最大容忍执行器失败次数。 |
spark.yarn.historyServer |
(none) | Spark history server地址,如:host.com:18080 。 这个地址不要包含协议头(http://)。 默认不设置,因为history server是可选的。 应用程序结束以后,YARN资源管理器web UI通过这个地址链接到Spark history server UI。 对于这属性,可以使用YARN属性变量,且这些变量是Spark在运行时组装的。 例如,如果Spark history server和YARN资源管理器(ResourceManager)部署在同一台机器上运行, 那么这个属性可以设置为 ${hadoopconf-yarn.resourcemanager.hostname}:18080 |
spark.yarn.dist.archives |
(none) | 逗号分隔的文档列表,其指向的文档将被提取到每个执行器的工作目录下。 |
spark.yarn.dist.files |
(none) | 逗号分隔的文件列表,其指向的文件将被复制到每个执行器的工作目录下。 |
spark.executor.instances |
2 |
执行器个数。注意,这个属性和 spark.dynamicAllocation.enabled是不兼容的。 如果同时设置了 spark.dynamicAllocation.enabled,那么动态分配将被关闭,并使用 spark.executor.instances 所设置的值。 |
spark.yarn.executor |
执行器内存 * 0.10或者 384MB中较大者 | 每个执行器所分配的堆外内存(MB)总量。这些内存将被用于存储VM开销、字符串常量,以及其他原生开销等。这会使执行器所需内存增加(典型情况,增加6%~10%) |
spark.yarn.driver |
驱动器内存 * 0.10或者 384MB中较大者 | 每个驱动器所分配的堆外内存(MB)总量。 这些内存将被用于存储VM开销、字符串常量,以及其他原生开销等。 这会使执行器所需内存增加(典型情况,增加6%~10%) |
spark.yarn.am |
Application Master 内存 * 0.10或者 384MB中较大者 |
与 spark.yarn.driver.memoryOverhead 相同,只是仅用于YARN AM client模式下。 |
spark.yarn.am.port |
(random) | YARN AM所监听的端口。 在YARN client模式下,用于Spark驱动器(driver)和YARN AM通信。 而在YARN cluster模式下,这个端口将被用于动态执行器特性,这个特性会处理调度器后台杀死执行器的请求。 |
spark.yarn.queue |
default |
Spark应用提交到哪个yarn队列。 |
spark.yarn.jar |
(none) | Spark jar文件位置,如果需要覆盖默认位置,请设定这个值。 默认的,Spark on YARN会使用本地的Spark jar包,但Spark jar包同样可以使用整个集群可读的HDFS文件位置。 这使YARN可以在各节点上缓存Spark jar包,而不需要每次运行一个应用的时候都要分发。 使用 hdfs:///some/path 来指定HDFS上jar包文件路径。 |
spark.yarn.access |
(none) | 逗号分隔的HDFS namenodes。 例如 spark.yarn.access.namenodes=hdfs://nn1.com:8032,hdfs://nn2.com:8032。 Spark应用必须有这些机器的访问权限,并且需要配置好 kerberos(可以在同一个域或者信任的域)。 Spark需要每个namenode的安全token,以便访问集群中HDFS。 |
spark.yarn.appMasterEnv |
(none) | 增加EnvironmentVariableName所指定的环境变量到YARN AM的进程中。 用户可以指定多个环境变量。在cluster模式下,这个可以控制Spark驱动器的环境变量; 而在client模式下,只控制执行器启动器的环境变量。 |
spark.yarn |
25 |
YARN AM 启动执行器的容器最多包含多少线程数。 |
spark.yarn.am |
(none) | 在client模式下,传给YARN AM 的JVM参数。 在cluster模式下,请使用spark.driver.extraJavaOptions |
spark.yarn.am |
(none) | client模式下传给YARN AM 额外依赖库。 |
spark.yarn.maxAppAttempts |
yarn .am.max-attempts in YARN |
提交应用最大尝试次数。不应大于YARN全局配置的最大尝试次数。 |
spark.yarn.am |
(none) | 定义AM失败跟踪校验间隔。 AM运行了至少要运行这么多时间后,其失败计数才被重置。 这个特性只有配置其值后才会生效,且只支持Hadoop-2.6+ |
spark.yarn.submit |
true |
在YARN cluster模式下,控制是否客户端等到Spark应用结束后再退出。 如果设为true,客户端进程将一直等待,并持续报告应用状态。 否则,客户端会在提交完成后退出。 |
spark.yarn.am |
(none) | 一个YARN节点标签表达式(node label expression),以此来限制AM可以被调度到哪些节点上执行。 只有Hadoop 2.6+才能支持节点标签表达式,所以如果用其他版本运行,这个属性将被忽略。 |
spark.yarn.executor |
(none) | 一个YARN节点标签表达式(node label expression),以此来限制执行器可以被调度到哪些节点上启动。 只有Hadoop 2.6+才能支持节点标签表达式,所以如果在其他版本上运行时,这个属性将被忽略。 |
spark.yarn.tags |
(none) | 逗号分隔的字符串,传递YARN应用tags。 其值将出现在YARN Application Reports中,可以用来过滤和查询YARN 应用。 |
spark.yarn.keytab |
(none) | 认证文件keytab的全路径。 这个文件将被复制到访问Secure Distributed Cache的YARN 应用节点上,并且周期性的刷新登陆的ticket和代理token(本地模式下也能work) |
spark.yarn.principal |
(none) | 登陆KDC的认证,secure HDFS需要(local模式下也能用) |
spark.yarn.config |
(none) | 某些路径,可能在网关主机上能正常访问(Spark应用启动的地方),而在其他节点上的访问方式(路径)可能不同。 对于这样的路径,需要本属性配合 spark.yarn.config.replacementPath组合使用,对于支持异构配置的集群,必须配置好这两个值,Spark才能正确地启动远程进程。 replacement path 通常包含一些YARN导出的环境变量(因此,对Spark containers可见)。 例如,如果网关节点上Hadoop库安装在 /disk1/hadoop,并且其导出环境变量为 HADOOP_HOME, 就需要将 spark.yarn.config.gatewayPath 设置为 /disk1/hadoop 并将 replacement path设为 $HADOOP_HOME, 这样才能在远程节点上以正确的环境变量启动进程。 |
spark.yarn.config |
(none) | 见 spark.yarn.config.getewayPath |
spark.yarn.security |
true |
在启用安全设置的情况下,控制是否对non-HDFS服务,获取代理token。 默认地,所有支持的服务,都启用;但你也可以在某些有冲突的情况下,对某些服务禁用。 目前支持的服务有:hive,hbase |
重要提示
- 对CPU资源的请求是否满足,取决于调度器如何配置和使用。
- cluster模式下,Spark执行器(executor)和驱动器(driver)的local目录都由YARN配置决定(yarn.nodemanager.local-dirs);如果用户指定了spark.local.dir,这时候将被忽略。在client模式下,Spark执行器(executor)的local目录由YARN决定,而驱动器(driver)的local目录由spark.local.dir决定,因为这时候,驱动器不在YARN上运行。
- 选项参数 –files和 –archives中井号(#)用法类似于Hadoop。例如,你可以指定 –files localtest.txt#appSees.txt,这将会把localtest.txt文件上传到HDFS上,并重命名为 appSees.txt,而你的程序应用用 appSees.txt来引用这个文件。
- 当你在cluster模式下使用本地文件时,使用选项–jar 才能让SparkContext.addJar正常工作,而不必使用 HDFS,HTTP,HTTPS或者FTP上的文件。
参考原文链接:http://spark.apache.org/docs/latest/running-on-yarn.html