Spark 任务提交

提交的应用程序

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


绑定应用程序的依赖关系

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

对于Python,您可以使用spark-submit的——py-files参数来添加.py、.zip或.egg文件,以便与应用程序一起分发。如果您依赖于多个Python文件,我们建议将它们打包成.zip或.egg。


启动应用程序与spark-submit

一旦绑定了用户应用程序,就可以使用bin/spark提交脚本启动它。这个脚本负责设置带有Spark及其依赖项的类路径,并可以支持不同的集群管理器和Spark支持的部署模式:

spark-submit 提交模板

(由于简书对于某些标签不识别 只能用图片了)

常用的选择:

--class: 应用程序的入口点(例如org.apache.spark.examples.SparkPi,自己程序的入口)

--master: 集群的主URL(例如spark://23.195.26.187:7077,一般用yarn管理,所以直接用yarn即可)

--conf: 任意Spark 配置属性用 键=值 格式表示。对于包含空格的值,将“key=value”用引号括起来

application-jar:包含应用程序和所有依赖项的打包jar的路径。URL必须在集群内部全局可见,例如,所有节点上都有hdfs://路径或文件://路径。

application-arguments: 传递给主类的主方法的参数

提交方式:

一种常见的部署策略是从物理上与工作机器共存的网关机器(例如,独立EC2集群中的主节点)提交应用程序。在这种设置中,client mode是合适的。在client mode下,驱动程序直接在spark-submit过程中启动,该过程充当集群的客户机。应用程序的输入和输出附加到控制台。因此,这种模式特别适用于涉及REPL(如Spark shell)的应用程序。

或者,如果您的应用程序是从远离工作机器的机器(例如本地的笔记本电脑上)提交的,那么通常使用集群模式来最小化驱动程序和执行程序之间的网络延迟。目前,standalone mode不支持Python应用程序的集群模式。

有一些特定于正在使用的集群管理器的可用选项。例如,使用带有集群部署模式的Spark独立集群,您还可以指定—supervision以确保如果驱动程序在非零退出代码的情况下失败,它将自动重新启动。要枚举用于spark-submit的所有此类选项,请使用—help运行它。下面是一些常见选项的例子:

在8个内核上本地运行应用程序
在客户端部署模式下在Spark独立集群上运行
在具有监视的集群部署模式下在Spark独立集群上运行
在 YARN 上运行
在Spark独立集群上运行Python应用程序
在具有监督的集群部署模式下在Mesos集群上运行

Master URLs

传递给Spark的主URL可以是以下格式之一

Master URL->Meaning

local->使用一个工作线程在本地运行Spark(即根本没有并行性)

local[K]->使用K个工作线程在本地运行Spark(理想情况下,将其设置为机器上的内核数)。

local[*]->在计算机上运行Spark,工作线程数量与逻辑核心数量相同。

spark://HOST:PORT->连接到给定的Spark独立集群主服务器。端口必须是您的主配置要使用的端口,默认为7077。

mesos://HOST:PORT->连接到给定的Mesos集群。端口必须是配置为使用的端口,默认为5050。或者,便集群使用管理员,使用便:/ / zk:/ / ....要使用——deployment -mode集群提交,应该将主机:端口配置为连接到MesosClusterDispatcher。

yarn->根据-deploy-mode的值,以客户机或集群模式连接到yarn集群。集群位置将基于hadoop op_conf_dir或YARN_CONF_DIR变量找到

从文件加载配置

Spark -submit脚本可以从属性文件加载默认的Spark配置值,并将其传递给应用程序。默认情况下,它将从conf/spark-defaults中读取选项。conf在Spark目录中。

以这种方式加载默认的Spark配置可以避免某些标志需要spark-submit。例如,如果 spark.master已设置,您可以安全地从spark-submit中省略 --master标志。通常,在SparkConf上显式设置的配置值具有最高的优先级,然后将标记传递给spark-submit,然后是默认文件中的值

如果您一直不清楚配置选项来自哪里,那么可以通过使用—verbose选项运行spark-submit来打印细粒度调试信息。

先进的依赖管理

在使用spark-submit时,应用程序jar以及—jars选项中包含的任何jar都将自动转移到集群中。jar之后提供的url必须用逗号分隔。该列表包含在驱动程序和执行程序类路径中。目录扩展不适用于--jars。

Spark使用以下URL模式来允许不同的策略来传递jars:

file:-绝对路径和文件:/ uri由驱动程序的HTTP文件服务器提供,每个执行程序都从驱动程序HTTP服务器提取文件。

hdfs:http:https:ftp:-这些按预期从URI中拉下文件和jar

local: 一个以local:/开头的URI应该以本地文件的形式存在于每个工作节点上。这意味着不会产生网络IO,对于推送到每个工作者的或通过NFS、GlusterFS等共享的大型文件/ jar也可以很好地工作。

注意,jar和文件被复制到执行器节点上的每个SparkContext的工作目录中。随着时间的推移,这会占用大量的空间,需要清理。对于YARN,清理是自动处理的,而对于Spark独立的,可以设置spark.worker.cleanup.appDataTtl参数进行自动清理

用户还可以通过使用-packages提供以逗号分隔的maven坐标列表来包含任何其他依赖项。使用此命令时将处理所有传递依赖项。其他存储库(或SBT中的解析器)可以以逗号分隔的方式与标志存储库一起添加。(注意,有密码保护的凭证存储库可以提供在某些情况下在存储库中URI,比如https://user password@host / ....以这种方式提供凭证时要小心。这些命令可以与pyspark、Spark -shell和Spark -submit一起使用,以包含Spark Packages.

 spark-submit 详细参数说明


参数名->参数说明

--master-> master 的地址,提交任务到哪里执行,例如 spark://host:port,  yarn,  local

--deploy-mode-> 在本地 (client) 启动 driver 或在 cluster 上启动,默认是 client

--class-> 应用程序的主类,仅针对 java 或 scala 应用

--name-> 应用程序的名称

--jars ->用逗号分隔的本地 jar 包,设置后,这些 jar 将包含在 driver 和 executor 的 classpath 下

--packages ->包含在driver 和executor 的 classpath 中的 jar 的 maven 坐标

--exclude-packages ->为了避免冲突 而指定不包含的 package

--repositories-> 远程 repository

--conf PROP=VALUE ->指定 spark 配置属性的值, 例如 -conf spark.executor.extraJavaOptions="-XX:MaxPermSize=256m"

--properties-file-> 加载的配置文件,默认为 conf/spark-defaults.conf

--driver-memory ->Driver内存,默认 1G

--driver-java-options-> 传给 driver 的额外的 Java 选项

--driver-library-path-> 传给 driver 的额外的库路径

--driver-class-path ->传给 driver 的额外的类路径

--driver-cores ->Driver 的核数,默认是1。在 yarn 或者 standalone 下使用

--executor-memory ->每个 executor 的内存,默认是1G

--total-executor-cores ->所有 executor 总共的核数。仅仅在 mesos 或者 standalone 下使用

--num-executors ->启动的 executor 数量。默认为2。在 yarn 下使用

--executor-core-> 每个 executor 的核数。在yarn或者standalone下使用

PS:此文是我的学习笔记,来源官网,在工具翻译的基础上进行了修改 仅供参考

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容