Spark Submitting Applications Guide

Spark bin 目录中的 Spark -submit 脚本用于在集群上启动应用程序。

构建程序依赖

如果代码依赖于其他项目,则需要将它们与应用程序一起打包,以便将代码分发到 Spark 集群。

对于 Python,可以使用spark-submit的 --py-files 参数来添加要随应用程序分发的.py、.zip或.egg文件。如果依赖于多个 Python 文件,则将它们打包成.zip或.egg。

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]
  • --class: 应用程序的入口点 (e.g. org.apache.spark.examples.SparkPi)
  • --master: 集群的主URL (e.g. spark://23.195.26.187:7077)
  • --deploy-mode: 将你的程序部署在集群或者本地,默认本地
  • --conf: 任意spark 的配置属性:"key=value"
  • application-jar: 包含应用程序和所有依赖项的绑定jar的路径。URL必须在集群内部全局可见,例如,所有节点上的 hdfs:// path 或 file://path。
  • application-arguments: 参数传递给主类的主方法(如果有的话)

一种常见的部署策略是,从工作机器物理位置相同的网关机器提交应用程序。在此设置中,客户端模式是适用的。在客户端模式下,驱动程序直接在 spark-submit 进程中启动,该进程充当集群的客户端。应用程序的输入和输出被打印到控制台。因此,这种模式特别适合涉及 REPL(例如Spark shell)的应用程序。

如果程序是远程提交的,通常使用集群模式来最小化驱动程序和执行者之间的网络延迟。目前,独立模式不支持 Python 应用程序的集群模式。

对于 python 程序,只需要简单的在 <application-jar> 后添加一个 .py 文件,然后在 --py--file 后添加 .zip、.egg或.py文件。

有几个选项是特定于正在使用的集群管理器的。例如,对于具有集群部署模式的 Spark 独立集群,您还可以指定—确保驱动程序在非零退出码失败时自动重新启动。

# 本地启用使用 8 个 core 的程序
./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

Master URLMeaning
local使用一个工作线程在本地运行Spark(即完全不存在并行性)
local[K]使用K个工作线程在本地运行Spark(理想情况下,将其设置为计算机上的核心数量)。
local[*]在本地运行Spark,使用与机器上的逻辑核心相同的工作线程。
spark://HOST:PORT连接到给定的Spark独立集群主机。该端口必须是您的主服务器配置使用的端口,默认情况下是7077。
mesos://HOST:PORT连接到给定的Mesos集群。端口必须是配置使用的端口,默认情况下是5050。
yarn根据 --deployment-mode的值,在 client 或 cluster模式下连接到 YARN 集群。集群位置将基于 HADOOP_CONF_DIR 或 YARN_CONF_DIR 变量找到。

从文件中加载配置

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

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

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

先进的依赖管理

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

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

  • file:绝对路径和 file:// uri由驱动程序的HTTP文件服务器提供,每个执行器从驱动程序HTTP服务器获取文件。
  • hdfs:, http:, https:, ftp:它们按预期从URI中拉出文件和jar
  • local:以 local:/ 开头的 URI 将作为每个工作节点上的本地文件存在。这意味着不会产生网络IO,对于推送到每个 worker 的大型 file/ jar,或者通过NFS、GlusterFS等共享的 file/jar都可以很好地工作。

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

 

原文地址:http://spark.apache.org/docs/2.1.1/submitting-applications.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值