Spark on YARN

YARN介绍

Yarn 的全称是Yet Anther Resource Negotiator。它作为 Hadoop 的一个组件,官方对它的定义是一个工作调度和集群资源管理的框架。可以基于这种资源管理机制运行多种计算框架,比如mapreduce和spark、flink。注意任何计算框架与YARN的结合,都必须遵循YARN的运作流程,如下图:

image-20240218171648891

ResourceManagerNodeManagers是整个计算框架的核心部分。ResourceManager负责资源的分配,将集群的资源分配给各个应用使用,而资源分配和调度的基本单位是Container。

Container封装了内存,磁盘和网络,每个任务都会被分配给Container,该任务使用Container中的资源执行,而NodeManager则是一个计算节点的管理者,负责启动Application所需的Container,并且对内部资源进行监控,将内存、磁盘、CPU等资源的使用情况汇报给ResourceManager

ApplicationMaster

ApplicationMaster负责以下任务:

  • 申请和分配资源:ApplicationMaster向YARN ResouceManager请求资源,例如CPU和内存。在申请资源时,它会考虑当前集群资源的可用性和已经申请的资源。一旦资源被分配,ApplicationMaster会通过Spark Driver向集群中的Executor发起任务。

  • 监控任务:一旦Executor启动,ApplicationMaster会持续监控Executor的状态,并在Executor失效或异常退出时进行处理。

  • 与Driver通信:ApplicationMaster与Spark Driver之间通过RPC协议通信,用于任务的调度,监控以及结果的收集。

Spark on Yarn运行模式

SPARK ON YARN运行模式根据Driver在集群中的位置可以分为YARN-Client模式和YARN-Cluster模式。

1.两模式区别:

(YARN-Client简写成client和 YARN-Cluster简写成cluster)

Driver的运行位置:

client:Driver运行在Client端(即提交作业的机器)。

image-20240218174152243

cluster:Driver运行在ApplicationMaster中。

image-20240218174203183

RM = ResourceManager, NN = NodeManager

Driver负责将应用转换为stage, job, task..., Application Master从ResourceManger申请资源,并检查容器运行作业的状态

客户端是否能退出:

client:因为client会和请求到的Container进行通信来完成作业的调制和执行,所以不能退出。

cluster:client只要提交完作业后就可以关掉,因为作业已经在yarn运行了。

运行的输出日志的位置:

client:日志会输出到控制台,便于测试

cluster:因为日志在Driver上,所以需要Spark Web UI上来查看日志

使用spark-submit 脚本提交应用程序时, 可以通过参数deploy-mode 指定client 设置为Yarn-Client模式:

./bin/spark-submit --class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode client \
--driver-memory 4g \
--executor-memory 2g \
--executor-cores 1 \
examples/jars/spark-examples*.jar

总结

  • SPARK ON YARN模式可以分为YARN-ClientYARN-Cluster两种模式,这两种模式的主要区别在于Driver程序运行的节点不同。

  • YARN-Client模式下,Driver程序直接运行在客户端,当使用者希望进行交互、调试、立即看到APP的输出结果的情况下,可以使用这种模式如果是在EMR上运行,则driver运行在master节点不,如果任务很多,则这些driver会占用master节点的大量资源

  • YARN-Cluster模式下,Driver程序运行在由RM(ResourceManager)启动的AP(APPMaster)上,YARN-Cluster模式更适合用于生产环境,是使用最广泛地模式。在EMR上,可以通过label,将driver程序跑在core节点上。

附 client与cluster模式详细执行流程

image-20240302234233031

image-20240302234244353