Spark 在 YARN 上的运行机制
在 YARN 上运行 Spark 时,不需要单独部署 Spark 集群。YARN 本身作为资源调度框架,负责对内部运行的计算框架进行资源调度管理。Spark 作为计算框架,直接运行在 YARN 中,并接受 YARN 的资源调度。在这种设置中,YARN 的 ResourceManager 充当 Master 角色,而 NodeManager 充当 Worker 角色。Spark 的 Driver 可以运行在 YARN 容器内或提交任务的客户端进程中,而实际执行任务的 Executor 运行在 YARN 提供的容器内。
配置 Spark 在 YARN 环境中的运行
要在 YARN 上运行 Spark,需要配置 spark-env.sh 文件,确保 HADOOP_CONF_DIR 和 YARN_CONF_DIR 指向正确的 Hadoop 配置文件目录。这样,Spark 就能够读取 HDFS 上的文件并在 YARN 集群中运行。
连接到 YARN
可以通过以下命令使用不同的 Spark 工具连接到 YARN:
-
PySpark: bin/pyspark --master yarn --deploy-mode client|cluster
-
Spark Shell: bin/spark-shell --master yarn --deploy-mode client|cluster
-
Spark Submit: bin/spark-submit --master yarn --deploy-mode client|cluster /path/to/app.py args
注意,交互式环境如 PySpark 和 Spark Shell 无法运行在 cluster 模式。
部署模式
在 YARN 上运行 Spark 时,可以选择以下两种部署模式:
-
Client 模式: 在这种模式下,Driver 运行在客户端机器上,这通常用于学习和测试环境。Driver 与集群的通信成本较高,但输出结果会在客户端显示。
-
Cluster 模式: 在这种模式下,Driver 运行在 YARN 集群中的一个容器内,通常用于生产环境。这种模式下,Driver 与集群的通信成本较低,但输出结果不会在客户端显示。如果 Driver 出现问题,YARN 会重启 ApplicationMaster(Driver)。
测试部署模式
可以通过运行圆周率 PI 程序来测试不同的部署模式。例如,使用 client 模式运行 PI 程序的命令如下:
bin/spark-submit --master yarn --deploy-mode client --driver-memory 512m --executor-memory 512m --num-executors 2 --total-executor-cores 2 /path/to/pi.py 10
而在 cluster 模式下,命令如下:
bin/spark-submit --master yarn --deploy-mode cluster --driver-memory 512m --executor-memory 512m --num-executors 2 --total-executor-cores 2 /path/to/pi.py 10
在 client 模式下,日志会随客户端的标准输出流输出,而在 cluster 模式下,客户端不会有日志信息和结果输出。