Yarn 的全称是Yet Anther Resource Negotiator
。它作为 Hadoop 的一个组件,官方对它的定义是一个工作调度和集群资源管理的框架。可以基于这种资源管理机制运行多种计算框架,比如mapreduce和spark、flink。注意任何计算框架与YARN的结合,都必须遵循YARN的运作流程,如下图:
ResourceManager
和NodeManagers
是整个计算框架的核心部分。ResourceManager
负责资源的分配,将集群的资源分配给各个应用使用,而资源分配和调度的基本单位是Container。
Container封装了内存,磁盘和网络,每个任务都会被分配给Container,该任务使用Container中的资源执行,而NodeManager
则是一个计算节点的管理者,负责启动Application所需的Container,并且对内部资源进行监控,将内存、磁盘、CPU等资源的使用情况汇报给ResourceManager
。
ApplicationMaster负责以下任务:
申请和分配资源:ApplicationMaster向YARN ResouceManager请求资源,例如CPU和内存。在申请资源时,它会考虑当前集群资源的可用性和已经申请的资源。一旦资源被分配,ApplicationMaster会通过Spark Driver向集群中的Executor发起任务。
监控任务:一旦Executor启动,ApplicationMaster会持续监控Executor的状态,并在Executor失效或异常退出时进行处理。
与Driver通信:ApplicationMaster与Spark Driver之间通过RPC协议通信,用于任务的调度,监控以及结果的收集。
SPARK ON YARN
运行模式根据Driver在集群中的位置可以分为YARN-Client
模式和YARN-Cluster
模式。
1.两模式区别:
(YARN-Client简写成client和 YARN-Cluster简写成cluster)
Driver的运行位置:
client:Driver运行在Client端(即提交作业的机器)。
cluster:Driver运行在ApplicationMaster中。
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-Client
和YARN-Cluster
两种模式,这两种模式的主要区别在于Driver程序运行的节点不同。
YARN-Client模式下,Driver程序直接运行在客户端,当使用者希望进行交互、调试、立即看到APP的输出结果的情况下,可以使用这种模式。如果是在EMR上运行,则driver运行在master节点不,如果任务很多,则这些driver会占用master节点的大量资源
YARN-Cluster模式下,Driver程序运行在由RM(ResourceManager)
启动的AP(APPMaster)
上,YARN-Cluster模式更适合用于生产环境,是使用最广泛地模式。在EMR上,可以通过label,将driver程序跑在core节点上。