spark提交

本文详细介绍了Spark应用的提交过程,包括spark-submit脚本的使用、集群管理器、发布模式选择,以及如何处理应用依赖。讲解了--class、--master、--deploy-mode等关键参数,强调了client模式和cluster模式的区别,并提到了通过--jars和--packages选项管理依赖。还讨论了如何根据网络环境选择提交位置以及Spark配置文件的作用。最后,提醒注意资源占用和清理策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这次主要讲一下spark的提交具体操作和流程。原来一直用,也没怎么深入查看,那么这次就来仔细看一下提交的学问。跟我们以前一样,我们以官网下手。这里我不在把英文贴上,直接进行。

在spark的bin文件夹下的spark-submit脚本是用来提交应用的。它能够通过一个统一的接口来使用所有spark支持的集群管理器,所以我们不必单独配置每一个应用。

如果你的代码依赖其他的项目,那么你需要与应用程序一起打包他们,为了把代码分布到spark集群中。想要实现这一点,你需要打一个jar包包含你的程序还有他所有的依赖。SBT和Maven都有该组件插件。当创建一个组合jar包时,把spark和hadoop列为provided的依赖。他们之所有被设置为provided是因为在集群管理器运行的时候这些都会被提供。一旦你有了组合jar包,那么你就可以调用bin/spark-submit的脚本来提交你的应用了。

该脚本支持不同的集群管理器和发布模式:



一些通常的用法如下:

1.--class:你程序的入口(就是你的main方法类)

2.--master:集群的主节点URL(比如:spark://主机:IP)

3.--deploy-mode:发布你的应用到集群(cluster)还是本地(client)    

4.--conf:任意key=value形式的spark配置属性,如果value包含空格,那么"key=value"要用引号引起

5.application-jar:包含你的应用和其依赖的jar包的路径,url必须在你的集群内部全局可见,不如hdfs://亦或是file://的路径

6.application-arguments:传入你的main方法的参数(如果你需要的话) 

一个通用的发布策略是从在地理上就接近你的网关机提交你的应用(白话就是哪台机器离你近就用那台机器提交,都远的话,你随意)。在这种机制下,client模式是合适的。在client模式下,驱动(driver)被直接提交在spark-submit进程内,对于集群来讲,相当于一个客户端。应用的输入和输出被打印在控制台,因此,这种模式非常适合包含REPL(比如spark shell)的应用。

取而代之,如果你的机器离你都非常的远,我们通常使用cluster模式来减少driver和executor之间的延迟。

有几种有效的操作来指明正在使用的spark管理器。比如,在spark单集群的情况下使用cluster发布模式,你同样可以指明--supervise确保driver能够重新启动如果程序以非0得状态结束。想要列出所有的spark-submit有关的操作,使用--help,以下是几个通用操作的例子:


Master URL可使用以下的任意一种方式:


spark-submit可以从属性文件中加载默认的属性并把他们传递给你的应用。默认情况下,他将会从conf/spark-default.conf文件中读取配置。

此种方式读取默认的spark配置能够避免spark-submit的一些标记(意思就是你不用挨个指定他要求指定的一些标签),比如spark.master属性被设置,你能安全的从spark-submit中忽略--master标签.总体来讲,显示的设置sparkConf的值是优先的,接着是spark-submit中的标签,最后才是默认

当你使用spark-submit的时候,--jars操作后面的所有应用的jar包以及一些其他的jar包都会被自动发送给集群。跟在--jars 后面的urls必须要用逗号隔开。这个list将会在driver和executor上面被包含,--jars并不支持目录扩展。

spark支持如下的jars的模板来传递jars:

1.file:绝对路径和file:/urls被driver的http文件服务器接收。每个executor从文件服务器拉取文件。

2.hdfs,http,https,ftp:这些从期望的uri拉取数据

3.local:以local:/开头的uri指的是每个worker节点本地存在文件,这也就意味着不会存在网络IO问题,同时对于worker之间传送较大的jars文件/凭借NFS/GlusterFS的也能够很好地运行。

jars和文件将会被复制到每个在executor节点上面工作的sparkcontext的工作目录中去。在一定时间内这将会用光相当一部分的空间,需要被清理干净。使用yarn的情况下,清理是自动完成的。spark单节点模式下,自动清理可以通过spark.worker.cleanup.appDataTtl来设置。

   用户也许还会通过逗号隔开的maven coordinates(--packages)列表来包含一些其他的依赖,当使用此命令的时候,所有传递的依赖都会被处理。同时也可以使用--repositories 标签来添加库。这些命令在spark包中的pyspark,spark-shell,spark-submit中被使用。

   好了,本次的内容就分享这么多,希望对大家有帮助。

   感谢开源,让技术走近你我。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值