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 ...
随机推荐
- zabbix3.4.6之源码安装
LAMP部署环境搭建: Linux+apache(httpd)+mysql(mariadb)+php: 版本要求:apache-1.3.12,mysql-5.0.3,php-5.4.0<http ...
- rt-thread之rt_kprintf函数输出串口设备更改
@2019-01-30 [小记] 一般 rt-thread 发布的 bsp 库默认的 rt_kprintf 函数的输出设备是串口1,想要更改输出设备为串口1,以 stm32 为例步骤如下: 首先,打开 ...
- 自适应PC端网页制作使用REM
做一个PC端的网页,设计图是1920X1080的. 要在常见屏上显示正常(比例正确可) 1280X720 1366X768 1440X900 1920X1080 使用了几种办法 1.内容在一屏内显示的 ...
- 解决SSH连接出现 Software caused connection abort 的问题
修改服务器中/etc/ssh/sshd.config 文件,将LoginGraceTime的值设为0,默认为2m,TCPKeepAlive 设为yes, 然后使用service sshd restar ...
- Testlink解决大用例导入问题
最近公司同事需要将别的testlink的用例迁移过来,由于现在新的服务器也在使用,不能使用数据库导入的办法,只能用xml文件进行导入,不过在导入的时候出现了个没遇到的问题,报错文件太大,无法上传. 解 ...
- macOS: sudo : Operation not permitted
通过查阅资料,了解到这个是之前引入的rootless机制.这让我从Linux换到Mac的用户很不习惯 https://developer.apple.com/videos/play/wwdc2015/ ...
- vue2.0项目实战(2)使用 vue-cli 搭建项目
Vue-cli是官方推荐的快速构建单页应用的脚手架.官方给的建议,如果你是初次尝试Vue,哪就老老实实用普通的书写引入js文件,这里牵扯太多的东西,例如webpack .npm .nodejs 等等, ...
- notepad问题汇总
右键无法设置为默认打开方式:https://blog.csdn.net/jl1134069094/article/details/50749075
- react-native中的style
在 React Native 中,你并不需要学习什么特殊的语法来定义样式.我们仍然是使用 JavaScript 来写样式. 所有的核心组件都接受名为style的属性.这些样式名基本上是遵循了 web ...
- Echarts关于仪表盘
https://blog.csdn.net/zc763375777/article/details/53837391 来无事,制作不一样的图标一发,领导让把仪表盘做成百分条,我TM也是醉了,大体样式如 ...