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