Spark-Submit简介

spark-submit脚本用于在集群上启动应用程序,它位于Spark的bin目录中。这种启动方式可以通过统一的界面使用所有的Spark支持的集群管理功能,因此您不必为每个应用程序专门配置应用程序。

绑定应用程序的依赖关系

如果您的代码依赖于其他项目,则需要将它们与应用程序一起打包,才能将代码分发到Spark群集。为此,请创建一个包含代码及其依赖关系的程序集jar(或“uber”jar)。 sbt和Maven都有集成插件。创建程序集jar时,列出Spark和Hadoop作为提供的依赖项;这些不需要捆绑,因为它们在运行时由集群管理器提供。一旦你有一个组装的jar,你可以调用bin/spark-submit脚本,传递你的jar。

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

使用spark-submit启动应用程序

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

./bin/spark-submit \

--class \

--master \

--deploy-mode \

--conf = \

... # other options

\

[application-arguments]

一些常用的选项是:

--class:应用程序的入口点,main函数所在的类(例如org.apache.spark.examples.SparkPi)

--master:群集的主网址(例如spark://23.195.26.187:7077)

--deploy-mode:是否将驱动程序部署在工作节点(cluster)上,或作为外部客户机(client)本地部署(默认值:client)†

--conf:Key = value格式的任意Spark配置属性。对于包含空格的值,用引号括起“key = value”(参见示例)。

application-jar:包含应用程序和所有依赖关系的捆绑jar的路径。该URL必须在集群内全局可见,例如hdfs://路径或所有节点上存在的file://路径。

application-arguments:参数传递给主类的main方法(如果有的话)

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

或者,如果您的应用程序从远离工作机器(例如本地在笔记本电脑上)的机器提交,通常使用cluster模式来最大限度地减少驱动程序和执行程序之间的网络延迟。目前,独立模式不支持Python应用程序的集群模式。

对于Python应用程序,只需将.py文件传递到而不是JAR文件中,并使用--py文件将Python .zip,.egg或.py文件添加到搜索路径。

有几个可用的选项是特定于正在使用的集群管理器。例如,使用具有集群部署模式的Spark独立集群,还可以指定--supervise,以确保如果使用非零退出代码失败,则自动重新启动驱动程序。要枚举所有可用于spark-submit的可用选项,请使用--help运行它。以下是常见选项的几个示例:

# Run application locally on 8 cores

./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

./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

./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

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 a Python application on a Spark standalone cluster

./bin/spark-submit \

--master spark://207.184.161.138:7077 \

examples/src/main/python/pi.py \

1000

# Run on a Mesos cluster in cluster deploy mode with 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

Master URLs

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

Master URL

解释

local

在本地运行Spark一个工作线程(即根本没有并行性)。

local[K]

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

local[*]

在本地运行Spark,其工作线程与机器上的逻辑内核一样多。

spark://HOST:PORT

连接到给定的Spark独立集群主控。端口必须是您的主机配置为使用哪个,默认情况下为7077。

mesos://HOST:PORT

连接到给定的Mesos集群。端口必须是您配置为使用的端口,默认值为5050。或者,对于使用ZooKeeper的Mesos集群,请使用mesos://zk://....要使用--deploy-mode集群提交,HOST:PORT应配置为连接到MesosClusterDispatcher。

yarn

根据-deploy-mode的值,以客户端(client)或集群(cluster)模式连接到YARN群集。将基于HADOOP_CONF_DIR或YARN_CONF_DIR变量找到集群位置。

从文件加载配置

spark-submit脚本可以从属性文件加载默认的Spark配置值,并将它们传递到应用程序。默认情况下,它将从Spark目录中的conf/spark-defaults.conf中读取选项。有关详细信息,请参阅有关加载默认配置的部分。

以这种方式加载默认Spark配置可以避免需要某些标志来引发提交。例如,如果设置了spark.master属性,则可以从spark-submit中安全地省略--master标志。通常,在SparkConf上显式设置的配置值具有最高优先级,然后将标志传递给spark-submit,然后将该值设置为默认值。

如果您不清楚配置选项的来源,您可以使用--verbose选项运行spark-submit来打印出细粒度的调试信息。

高级依赖管理

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

Spark使用以下URL方案来允许不同的策略来传播jar:

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

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

local: - 以local:/开头的URI预计作为每个工作节点上的本地文件存在。这意味着不会出现网络IO,并且适用于推送到每个工作者的大型文件/ JAR,或通过NFS,GlusterFS等共享。

请注意,JAR和文件将复制到执行程序节点上每个SparkContext的工作目录。这可能会随着时间的推移占用大量空间,并需要清理。使用YARN,清理将自动进行处理,并且通过Spark standalone,可以使用spark.worker.cleanup.appDataTtl属性配置自动清理。

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

对于Python,等效的--py-files选项可用于将.egg,.zip和.py库分发到执行程序。

spark submit示意图

进阶阅读

部署应用程序后,[集群模式概述][http://spark.apache.org/docs/latest/cluster-overview.html]将介绍分布式执行中涉及的组件以及如何监视和调试应用程序。

spark提交python程序_Spark任务提交(Spark Submit)相关推荐

  1. spark提交python程序_pyspark:带有spark提交的jars依赖

    我编写了一个pyspark脚本,该脚本读取两个json文件,coGroup然后将它们发送到elasticsearch集群.当我在本地运行该elasticsearch- hadoop文件时,一切都会正常 ...

  2. spark教程python案例_Spark实战(四)spark+python快速入门实战小例子(PySpark)

    由于目前很多spark程序资料都是用scala语言写的,但是现在需要用python来实现,于是在网上找了scala写的例子改为python实现 1.集群测试实例 代码如下: from pyspark. ...

  3. spark调用python程序包_pycharm编写spark程序,导入pyspark包的3中实现方法

    一种方法: File --> Default Setting --> 选中Project Interpreter中的一个python版本-->点击右边锯齿形图标(设置)-->选 ...

  4. 【Python学习系列四】Python程序通过hadoop-streaming提交到Hadoop集群执行MapReduce

    场景:将Python程序通过hadoop-streaming提交到Hadoop集群执行. 参考:http://www.michael-noll.com/tutorials/writing-an-had ...

  5. spark shell 删除失效_Spark任务提交源码解析

    1. 前言 反反复复捣鼓了很久,终于开始学习Spark的源码了,果不其然,那真的很有趣.这里我打算一本正经的胡说八道来讲一下Spark作业的提交过程. 基础mac系统基础环境如下: JDK 1.8 I ...

  6. spark与python关系_spark: RDD与DataFrame之间的相互转换方法

    DataFrame是一个组织成命名列的数据集.它在概念上等同于关系数据库中的表或R/Python中的数据框架,但其经过了优化.DataFrames可以从各种各样的源构建,例如:结构化数据文件,Hive ...

  7. linux下spark的python编辑_Linux下搭建Spark 的 Python 编程环境的方法

    Spark编程环境 Spark 可以独立安装使用,也可以和Hadoop 一起安装使用.在安装 Spark 之前,首先确保你的电脑上已经安装了 Java 8 或者更高的版本. Spark 安装 访问 S ...

  8. 运行qsub 提交python程序 Ambiguous output redirect fault报错

    文章目录 运行Ridge_LOOCV_Permutation 报错现象 其它报错 在Linux下创建一个可运行shell脚本 Pycharm导入自定义的模块出现红色下划线 Reference 运行Ri ...

  9. html表单提交按钮程序,表单 - 提交按钮

    定义用于向表单处理程序(form-handler)提交表单的按钮. 表单处理程序通常是包含用来处理输入数据的脚本的服务器页面. 表单处理程序在表单的 action 属性中指定: 实例: First n ...

最新文章

  1. 点云的直通滤波(附实现代码)
  2. php 信号量 关闭,php 信号量
  3. 5、用枚举值表示状态、选项、状态码
  4. vmware的vmdk格式虚拟机转换为kvm的qcow2格式
  5. C++—— cin输入流详解
  6. 华为nova 5z即将亮相:麒麟810+3200万人像超级夜景
  7. C# List最大值最小值问题 List排序问题 List Max/Min
  8. mysql报错无效默认值1067_Mysql 报错:#1067
  9. [高通SDM450][Android9.0]PL2303G驱动升级
  10. 阿里云Maven镜像
  11. html5中display flex,详解CSS中的display:flex||inline-flex属性
  12. 水质环境监测系统解决方案
  13. 在Excel中如何让文字竖排
  14. DC-4靶场练习—teehee提权
  15. 20230220学习总结02
  16. android扇形动画弹出icon的功能
  17. Github 最受欢迎的 35 个项目一览
  18. django改变用户头像
  19. 微信api调用限制,45009 reach max api daily quota limit 解决方法
  20. 马云最新演讲:真正的强者,是在最孤立无援的时刻,依然坚持到底

热门文章

  1. PT站点签到脚本,可挂青龙面板自动签到
  2. MachineLearning(Hsuan-Tien Lin)第一讲
  3. 神奇的cyclegan!
  4. shell脚本之sed开发
  5. 减少HTTP请求的四种方式
  6. C# 3个可乐瓶可以换一瓶可乐,现在有364瓶可乐。问一共可以喝多少瓶可乐,剩下几个空瓶! 案例
  7. Chap3_数据预处理
  8. Android Gesture 手势识别使用实例
  9. 鸿蒙系统适配微信,微信鸿蒙版本下载-微信鸿蒙系统app官方下载 v8.0.3-手游之家...
  10. 读取存储《哈姆雷特》英文剧本的文件,分析统计其中单词出现的频率,实现以下结果:给出前10个人物出现的次数使用turtle模块绘制词频统计结果;使用wordcloud库会出词云图;