Spark Submitting Applications浅析
Submitting Applications提交应用程序
在spark的bin目录下spark-submit脚本被用于在集群中启动应用程序。它可以通过一个统一的接口来使用Spark支持的所有集群管理器(目前Spark支持的集群模式有自带的Standalone、Apache Mesos、Hadoop YARN、Kubernetes),因此你不必为每个集群模式特意配置你的应用程序。
Bundling Your Application's Dependencies捆绑应用程序的依赖项
如果你的代码依赖其他项目,你需要将它们和你的应用程序一起打包,以便将代码分发到Spark集群。为了完成这个,需要创建一个包含你的代码和它的依赖项的assembly jar包(或者 “uber” jar)。sbt和Maven都有assembly插件。当创建assembly jars时,将Spark和Hadoop列为provided的依赖项;这意味着不需要捆绑它们因为集群管理器在运行时已经提供了这些依赖项。一旦你有assembled jar包,当使用你的jar时可以调用bin/spark-submit脚本。
对于Python,你可以使用spark-submit的--py-files参数去添加.py,.zip或者.egg 文件去分发你的应用程序。如果你依赖多个Python文件,我们要求把它们打包进一个.zip或者.egg文件。
Launching Applications with spark-submit通过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]
一些通用的选项有:
参数名称 | 说明 |
--master MASTER_URL | 集群的master URL,可以是spark://host:port、mesos://host:port、yarn、yarn-cluster、yarn-client、local |
--deploy-mode DEPLOY_MODE | Driver程序运行的方式,Client或者Cluster,默认值是Client |
--class CLASS_NAME | 应用程序的入口点,主类名称,含包名(e.g. org.apache.spark.examples.SparkPi) |
--name NAME | Spark Application的名称 |
--jars JARS | 加入到Driver和Executor的ClassPath中的jar包列表,以逗号分隔 |
--py-files PY_FILES | 用逗号隔开的放置在Python应用程序PYTHONPATH上的.zip、.egg、.py文件列表 |
--files FILES | 用逗号隔开的每个Executor运行时需要的配置文件列表 |
--conf | 以key-value格式的任意Spark配置属性。对于包含空格的值,在引号中包含"key=value" |
--properties-file FILE | 设置应用程序属性的文件路径,默认时$SPARK_HOME/conf/spark-defaults.conf |
--driver-memory MEM | Driver程序运行时使用的内存大小,默认为512MB |
--driver-java-options | Driver程序运行时的一些Java配置选项,比如GC相关信息,新生代大小设置等 |
--driver-library-path | Driver程序依赖的第三方jar包 |
--driver-class-path | Driver程序的类路径 |
--driver-cores NUM | Driver程序的使用CPU个数,仅限于Standalone模式,默认为1个 |
--executor-memory MEM | Executor运行时使用的内存大小,默认为1GB |
--total-executor-cores NUM | executor使用的总核数,仅限于Standalone、Spark on Mesos模式 |
--executor-cores NUM | 每个Executor使用的内核数,默认为1,仅限于Spark on Yarn模式 |
--num-executors NUM | 启动的Executor数量,默认是2个,仅限于Spark on Yarn模式 |
--supervise | 失败后是否重启Driver,仅限于Standalone模式 |
--queue QUEUE_NAME | 提交应用程序给哪个Yarn的队列,默认是default队列,仅限于Spark on Yarn模式 |
--archives ARCHIVES | 逗号分隔的归档文件列表,会被解压到每个Executor的工作目录中,仅限于Spark on Yarn模式 |
application-jar | 一个包含应用程序和全部依赖项的捆绑jar的路径。URL必须在集群中全局可见,例如,hdfs://路径或者在所有节点上都存在的file://路径。 |
application-arguments | 传递给main类的main方法的参数(如果有的话) |
常见的部署策略是从与工作计算机物理上位于同一位置的网关计算机(例如,独立EC2集群中的主节点)提交应用程序。在这一设置中,clien模式是适用的。在client模式下,在集群中扮演client的spark-submit进程中直接启动驱动程序driver。应用程序的输入输出附加到控制台。因此,这模式特别适用于设计REPL的应用程序(例如Spark shell)。
或者,如果你的应用程序从远离工作计算机的计算机提交的(例如,在笔记本电脑上本地提交的),则通常使用cluster模式去最小化驱动程序drivers和执行程序executors之间的网络延迟。当前,standalone模式不支持Python应用程序的集群模式。
对于Python应用程序,只需传递一个.py文件替代<application-jar>而不是JAR,并使用--py-files将Python .zip,.egg或.py文件添加到搜索路径中。
有一些特定于正在使用的集群管理器的可用选项。例如,对于具有cluster部署模式的Spark standalone集群,你也可以指定--supervise去确保驱动程序driver在失败且退出代码为非零时自动重启。要枚举所有可用与spark-submit的选项,请使用--help运行它。
# Run application locally on cores 用8个核本地运行应用程序
./bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master local[] \
/path/to/examples.jar \ # Run on a Spark standalone cluster in client deploy mode 在client部署模式下运行Spark standalone集群
./bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://207.184.161.138:7077 \
--executor-memory 20G \
--total-executor-cores \
/path/to/examples.jar \ # Run on a Spark standalone cluster in cluster deploy mode with supervise在具有supervise的cluster部署模式运行Spark standalone
./bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://207.184.138:7077 \
--deploy-mode cluster \
--supervise \
--executor-memory 20G \
--total-executor-cores \
/path/to/examples.jar \ # Run on a YARN cluster 在Yarn集群上运行
export HADOOP_CONF_DIR=xxx
./bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \ #可以是client模式的client
--executor-memory 20G
--num-executors \
/path/to/examples.jar \ # Run a Python application on a Spark standalone cluster在spark的standalone上部署Python应用程序
./bin/spark-submit \
--master spark:207.184.161.138: \
examples/src/main/python/pi.py # Run on a Mesos cluster in cluster deploy mode with supervise在具有supervise的cluster部署模式运行Mesos cluster
./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 \
http://path/to/examples.jar \ # Run on a Kubernetes cluster in cluster deploy mode在cluster部署模式上运行Kubernetes
./bin/spark-submit \
--class org.apache.spark.example.SparkPi \
--master k8s://xx.yy.zz.ww:443
--deploy-mode cluster
--num-executors
http://path/to/examples.jar \
Master URLS
传递给Spark的主URLs可以采用如下格式之一:
Master URL | Meaning |
local | 使用一个工作线程在本地运行Spark(i.e. 根本没有并行)。 |
local[K] | 使用K个工作线程在本地运行Spark(理想的,把它设置成你机器的核数) |
local[K, F] | 使用K个工作线程和F最大错误在本地运行Spark。 |
local[*] | 使用与计算机上的逻辑核心一样多的工作线程在本地运行Spark。 |
local[*, F] | 使用与计算机上的逻辑核心一样多的工作线程和F最大错误在本地运行Spark。 |
spark://HOST:PORT | 连接到给定的Spark standalone cluster模式主服务器。端口必须是你的主服务器配置使用的那个,默认7077。 |
spark://HOST1:PORT1,HOST2:PORT2 | 连接到给定的Spark standalone cluster模式,其带有zookeeper的备用主服务器。该列表必须具有使用Zookeeper设置的高可用集群中的所有主机hosts。端口必须是每个主服务器配置使用的那个,默认7077。 |
mesos://HOST:PORT | 连接到给定的Mesos集群。端口必须是你配置使用的那个,默认5050。或者,对于使用zookeeper的Mesos集群,使用mesos://zk://...。使用deploy-mode cluster提交,HOST:PORT应该配置去连接MesosClusterDispatcher。 |
yarn | 根据--deploy-mode的值,以客户端或集群模式连接到YARN集群。集群位置将根据HADOOP_CONF_DIR或YARN_CONF_DIR变量找到。 |
k8s://HOST:PORT | 以cluster模式连接到Kubernetes集群。client模式当前不支持,将会在将来的版本支持。HOST和PORT参考[Kubernetes API服务器](https://kubernetes.io/docs/reference/generated/kube-apiserver/)。默认使用TLS连接。为了强制它使用不安全的连接,你可以使用k8s://http://HOST:PORT。 |
Loading Configuration from a File从文件加载配置
spark-submit脚步可以从一个属性文件加载默认的Spark配置值,并将它们传递到你的应用程序。默认它将会从Spark目录下的conf/spark-defaults.conf读取选项。更多详情,在loading default configurations上查看节点。
以这种方式加载默认的Spark配置可以避免某些标志需要Spark-submit。例如,如果设置spark.master属性,你可以安全地从spark-submit中省略--master标志。通常,在SparkConf上显式设置的配置值采用最高优先级,然后是传递给spark-submit的标志,然后是默认文件中的值。
如果你不清楚配置选项的来源,可以通过使用--verbose选项运行spark-submit来打印出细粒度的调试信息。
Advanced Dependency Management更高级的依赖管理
当使用spark-submit时,应用程序jar以及--jars选项中包含的任何jar都将自动传输到集群。在--jars之后提供的URL必须用逗号分隔。该列表包含在驱动程序driver和执行程序executor类路径中。目录扩展不适用于--jars。
Spark使用以下的URL方案来允许传播jar的不同策略:
- file:-绝对路径和file:/ URIs由驱动程序driver的HTTP文件服务器提供服务,每个执行程序executor从驱动程序driver HTTP服务器提取文件。
- hdfs:, http:, https:, ftp: -这些按预期从URI中下拉文件和JAR。
- local: -以local:/开头的URI应该作为每个工作节点上的本地文件存在。这意味着不会产生任何网络IO,并且适用于推送给每个工作者或通过NFS,GlusterFS等共享的大型文件/JARs。
注意:JARs和文件将复制到执行程序节点上的每个SparkContext的工作目录。随着时间的推移,这会占用大量空间,需要进行清理。使用YARN,可以自动清理;使用Spark standalone,可以使用spark.cleanup.appDataTtl属性来配置清理。
用户还可以通过使用--packages提供以逗号分隔的Maven坐标列表来包含任何其他依赖项。 使用此命令时将处理所有传递依赖项。 可以使用标志--repositories以逗号分隔的方式添加其他存储库(或SBT中的解析程序)。 (请注意,在某些情况下,可以在存储库URI中提供受密码保护的存储库的凭据,例如在https:// user:password @ host / ....以这种方式提供凭据时要小心。)这些命令可以是 与pyspark,spark-shell和spark-submit一起使用以包含Spark Packages。
对于Python,可以使用等效的--py-files选项将.egg,.zip和.py库分发给执行程序。
More Information更多消息
部署应用程序后,集群模式概述描述了分布式执行中涉及的组件,以及如何监视和调试应用程序。
Spark Submitting Applications浅析的更多相关文章
- Apache Spark 2.2.0 中文文档 - Submitting Applications | ApacheCN
Submitting Applications 在 script in Spark的 bin 目录中的spark-submit 脚本用与在集群上启动应用程序.它可以通过一个统一的接口使用所有 Spar ...
- Spark设计思想浅析
Spark is no rocket science!——博主 了解分布式计算的朋友,一定知道DAG这样一个概念.其实我接触DAG也是在学习MapReduce时了解到的.(具体可查阅<大数据日知 ...
- Spark分区器浅析
分区器作用:决定该数据在哪个分区 概览: 仅仅只有pairRDD才可能持有分区器,普通RDD的分区器为None 在分区器为None时RDD分区一般继承至父RDD分区 初始RDD分区数: 由集合创建,R ...
- 搭建Spark的单机版集群
一.创建用户 # useradd spark # passwd spark 二.下载软件 JDK,Scala,SBT,Maven 版本信息如下: JDK jdk-7u79-linux-x64.gz S ...
- 让spark运行在mesos上 -- 分布式计算系统spark学习(五)
mesos集群部署参见上篇. 运行在mesos上面和 spark standalone模式的区别是: 1)stand alone 需要自己启动spark master 需要自己启动spark slav ...
- Spark中的编程模型
1. Spark中的基本概念 Application:基于Spark的用户程序,包含了一个driver program和集群中多个executor. Driver Program:运行Applicat ...
- Spark编程模型及RDD操作
转载自:http://blog.csdn.net/liuwenbo0920/article/details/45243775 1. Spark中的基本概念 在Spark中,有下面的基本概念.Appli ...
- Spark入门学习
1. Spark Overview(spark概述) Apache spark是一个快速和通用的集群计算系统.它提供了Java,Scala,Python和R的高级APIs,以及支持通用执行图的优化引擎 ...
- Spark单机版集群
一.创建用户 # useradd spark # passwd spark 二.下载软件 JDK,Scala,SBT,Maven 版本信息如下: JDK jdk-7u79-linux-x64.gz S ...
随机推荐
- [luogu4479][BJWC2018]第k大斜率【二维偏序+二分+离散化+树状数组】
传送门 https://www.luogu.org/problemnew/show/P4479 题目描述 在平面直角坐标系上,有 n 个不同的点.任意两个不同的点确定了一条直线.请求出所有斜率存在的直 ...
- attr prop jquery关于获取DOM属性值的两个函数
$('#domid').attr('acitve') $('#domid').prop('checked') // 在使用JQUERY获取DOM元素的属性时,有两个函数,attr 和 prop < ...
- 【dfs】p1451 求细胞数量
题目描述 一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数.(1<=m,n<=100)? 输入输出格式## ...
- codeforces #530 D(Sum in the tree) (树上贪心)
Mitya has a rooted tree with nn vertices indexed from 11 to nn, where the root has index 11. Each ve ...
- java 遍历方法 及 数组,ArrayList,HashMap,HashSet的遍历
一,遍历方法的实现原理 1.传统的for循环遍历,基于计数器的: 遍历者自己在集合外部维护一个计数器,然后依次读取每一个位置的元素,当读取到最后一个元素后,停止.主要就是需要按元素的位置来读取元素. ...
- Arch Linux中安装Anaconda
安装步骤 通过AUR安装yaourt -S anaconda 激活Anaconda环境source /opt/anaconda/bin/activate root 关闭Anaconda环境source ...
- 解题:CF622F The Sum of the k-th Powers
题面 TJOI2018出CF原题弱化版是不是有点太过分了?对,就是 TJOI2018 教科书般的亵渎 然而我这个问题只会那个题的范围的m^3做法 回忆一下1到n求和是二次的,平方求和公式是三次的,立方 ...
- (转)c++ 回调函数
https://www.cnblogs.com/chenyuming507950417/archive/2012/01/02/2310114.html 今天讨论下C/C++中的回调函数. 在理解“回调 ...
- Python模块之time、random、os、sys、序列化、re
Time模块 和时间有关系的我们就要用到时间模块.在使用模块之前,应该首先导入这个模块. #常用方法 1.time.sleep(secs) (线程)推迟指定的时间运行.单位为秒. 2.time.tim ...
- unittest的使用三——断言
常用的断言有3种: 判断两个值是不是都相等,参数分别是第一个值,第二个值,msg代表不想等的话,描述的信息 def assertEqual(self, first, second, msg=None) ...