Spark 客户端可以直接连接 Yarn,不需要额外构建Spark集群。
有 client 和 cluster 两种模式,主要区别在于:Driver 程序的运行节点不同。
- client:Driver程序运行在客户端,适用于交互、调试,希望立即看到app的输出
- cluster:Driver程序运行在由 RM(ResourceManager)启动的 AM(AplicationMaster)上, 适用于生产环境。
需要环境:Hadoop-YRAN环境(Hadoop分布式环境搭建教程)
确保HADOOP_CONF_DIR
或YARN_CONF_DIR
指向包含Hadoop集群的(客户端)配置文件的目录。这些配置用于写入HDFS并连接到YARN ResourceManager。此目录中包含的配置将分发到YARN群集,以便应用程序使用的所有容器都使用相同的配置。如果配置引用不是由YARN管理的Java系统属性或环境变量,则还应该在Spark应用程序的配置(在客户端模式下运行时的驱动程序,执行程序和AM)中进行设置。
- 修改spark-evn.sh文件
HADOOP_CONF_DIR=/opt/module/hadoop-2.7.2/etc/hadoop
有两种部署模式可用于在YARN上启动Spark应用程序。在cluster模式下
,Spark驱动程序在由YARN在群集上管理的应用程序主进程中运行,并且客户端可以在启动应用程序后消失。在client模式下
,驱动程序在客户端进程中运行,而应用程序主控仅用于从YARN请求资源。
与Spark支持的其他集群管理器(在–master 参数中指定了主服务器的地址)不同,在YARN模式下,ResourceManager的地址是从Hadoop配置中提取的。因此,--master参数为yarn
。
要以cluster模式启动Spark应用程序:
./bin/spark-submit \
--class path.to.your.Class \
--master yarn \
--deploy-mode cluster \
[options] <app jar> [app options]
例如:
./bin/spark-submit --class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \
--driver-memory 4g \
--executor-memory 2g \
--executor-cores 1 \
--queue thequeue \
examples/jars/spark-examples*.jar \
10
上面启动了一个YARN客户端程序,该程序启动了默认的Application Master。然后,SparkPi将作为Application Master的子线程运行。客户端将定期轮询Application Master以获取状态更新,并将其显示在控制台中。应用程序完成运行后,客户端将退出。请参阅下面的“调试应用程序”部分,以了解如何查看驱动程序和执行程序日志。
要以client模式启动Spark应用程序,请执行相同的操作,但替换cluster为client。下面显示了如何spark-shell在client模式下运行:
./bin/spark-shell --master yarn --deploy-mode client