Spark on Yarn

  Spark 0.6.0开始支持此功能

准备:

  运行Spark-on-YARN需要Spark的二进制发布包。参考编译

配置:

环境变量:

SPARK_YARN_USER_ENV

  用户可以在这个参数中设置Spark on YARN的环境变量,可以省略。

  例如:SPARK_YARN_USER_ENV="JAVA_HOME=/jdk64,FOO=bar"。

SPARK_JAR

  设置Spark jar在HDFS的位置。

  例如:export SPARK_JAR=hdfs:///some/path.

在每台Hadoop NodeManager节点上设置变量

启动:

  确保HADOOP_CONF_DIR或YARN_CONF_DIR所指向的目录包含Hadoop集群的配置文件。这些配置文件用来连接YARN的ResourceManager并写数据到DFS。此为提交任务的Spark安装,为了使用spark-submit工具。因此,只在此机器上配置便可。

有两种模式:

yarn-cluster:

Spark的driver运行YARN集群启动的一个application master进程中,client在初始化application后可以消失。

yarn-client:

Spark的driver运行在client进程中,而application master只用来向YARN申请资源。

不像Spark standalone和mesos模式,在那儿master地址使用指定的master参数;在YARN模式中,ResourceManager的地址从Hadoop配置文件中获取。因此,YARN模式中master参数简单的为“yarn-client”或“yarn-cluster”。

在yarn-cluster模式中启动一个application:

./bin/spark-submit --class path.to.your.Class --master yarn-cluster [options] <app jar> [app options]

例如:

SPARK_JAR=hdfs://hansight/libs/spark-assembly-1.0.2-hadoop2.4.0.2.1.4.0-632.jar \
./bin/spark-submit --class org.apache.spark.examples.SparkPI \
    --master yarn-cluster \
    --num-executors 3 \
    --driver-memory 4g \
    --executor-memory 2g \
    --executor-cores 1 \
    lib/spark-examples*.jar \
    10

注:上面启动一个YARN客户端,该客户端启动默认的Application Master。SparkPI将作为一个子线程运行在Application Master中。client将定期的读取Application Master获取状态更新并把更新显示在控制台中。一旦你的application运行完成client会结束。

在yarn-client模式中启动一个application:

./bin/spark-submit --master yarn-client  [options] <app jar> [app options]

只是把--master的参数值改为yarn-client,其它都与yarn-cluster相同。

添加其它JAR依赖

在yarn-cluster模式中,driver与client运行在不同的机器上。因此,SparkContext.addJar方法不会像client在本地模式那样开箱即用。为了使SparkContext.addJar可用,需要在启动命令参数--jars后面添加这些jar。 例如:

$ ./bin/spark-submit --class my.main.Class \
--master yarn-cluster \
--jars my-other-jar.jar,my-other-other-jar.jar
my-main-jar.jar
app_arg1 app_arg2