提交 spark 应用

本贴最后更新于 1898 天前,其中的信息可能已经沧海桑田

提交 spark 应用

提交应用

在 bin 目录中 spark-submit 脚本用于向集群启动你的应用,通过统一的接口,可以支持所有 spark 支持的 clusterManager,所以你没有必要为你的每个应用坐一些特殊的配置。

打包你的应用程序

如果你的代码依赖与其他的项目,为了分发所有代码到集群,需要把他们和你的应用打包在一起,所以你可以打一个 assembly jar 或者"uber jar" 包含你的代码和依赖。sbt 和 maven 都有 assembly 插件。在创建 assembly jar 时,将 hadoop 和 spark 的依赖设置成为 provided,这些依赖在运行时 cluster 已经包含了,所以不需要用户打包进来。

##Loading Configuration from a File

spark-submit 会自动从配置文件中加载默认的属性值传递给你的应用程序。默认读取的是 conf/spark-default.conf
通过这种方式加载配置属性可以取消 spark-submit 上的参数,列如:加入 spark.master 在应用程序中已经设置了那么就可以在 spark-submit 取消--master 选项。总之,通过 SparkConf 设置的属性具有最高的优先级,其次是通过 spark-submit 传递的,最后是配置文件中默认的。

用 spark-submit 启动你的应用

一旦你的应用打包好了,你就可以用 spark-submit 脚本启动你的应用了。这个脚本会设置 spark 的 classpath 和它的依赖。并且可以支持 spark 所支持的所有 clusterManagerdeployMode

./bin/spark-submit \
  --class <main-class> \
  --master <master-url> \
  --deploy-mode <deploy-mode> \
  --conf <key>=<value> \
  ... # other options
  <application-jar> \
  [application-arguments]

下面讲解一些通用的选项:

  • --class:程序的切入点(eg:org.apache.spark.examples.SparkPi)
  • --master:集群的 master url(eg.xxx)
  • --deploy-mode:决定你的 driver 程序是否在 worker node(cluster 模式下),或者作为一个外部 client(clinet 模式)默认值是 client
  • --conf 以 key=value 的形式设置任意的 spark properties,如果 value 包含空格,用双引号括起来,
  • 你的应用程序和依赖的 jar 的路径,URL 必须对集群是全局可见的,列如:hdfs:// 或者 a 路径必须在所有的 node 都可见
  • application-arguments 如果有额外的参数需要传递给你的 main 程序,请用这个选项

一个常用的提交应用的策略是通过一个网关机器(gateway machine),并且这个机器在物理位置上接近你的 worker node,这种方式 client 模式是非常适合的。在 client 模式下,dirver 直接被 spark-submit 启动扮演集群一个 client 的角色。应用的输出都在 console 上,因此这种模式非常十分的适合那些需要 REPL 的应用(比如 Spark shell).

有一个可用选项可以指定 clusterManager,在 standalone 集群中,cluster 模式下,你可以指定--supervise 以确保 driver 程序非正常退出的情况下自动重启 driver。--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

master url 可以是以下的格式:

MasterURL 解释
local 本地模式一个 worker 线程(没有并发)
local[k] 本地模式 K 个 worker 线程(设置成你机器的 core 数)
local[*] 本地模式多个 worker 线程数—> 你机器的逻辑 core 数量
PORT 连接到一个 spark standalone 集群,端口号必须是 master 指定的,7007 是默认的
PORT 连接到一个 Messon 集群
yarn 连接到一个 yarn 集群。—deploy-mode 指定 client 或者 cluster 模式,集群地址通过 HADOOP_CONF_DIR or YARN_CONF_DIR 自动发现

通过文件配置

spark-submit 会自动从配置文件中加载默认的属性值传递给你的应用程序。默认读取的是 conf/spark-default.conf
通过这种方式加载配置属性可以取消 spark-submit 上的参数,列如:加入 spark.master 在应用程序中已经设置了那么就可以在 spark-submit 取消--master 选项。总之,通过 SparkConf 设置的属性具有最高的优先级,其次是通过 spark-submit 传递的,最后是配置文件中默认的。

  • Spark

    Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

    74 引用 • 46 回帖 • 549 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...