本文大部分内容来自论文《Apache Hadoop YARN :Yet Another Resource Negotiator》及官网。
YARN主要解决以下10个问题:
【R1】:Scalability
【R2】:Multi-tenancy
【R3】:Serviceability
【R4】:Locality awareness
【R5】:High Cluster Utilization
【R6】:Reliability / Availability
【R7】:Secure and auditable operation
【R8】:Support for Programming Model Diversity
【R9】:Flexible Resource Model
【R10】:Backward compatibility
yarn的架构:
RM :运行在一台专用的机器上,他对集群的资源使用起到调度作用。自带的调度器有 Capacity 、Fairshare、FIFO 调度器。通过heartbeat与NM进行通信
作业通过开放的提交协议被提交到到RM,通过安全机制的检查,进入调度器进行调度;一旦调度器获得了足够的资源,就会将任务调度出去,application的状态会从
accepted置成running。
RM 对外暴露了两个接口:
1)、客户端提交application
2)、AM请求资源,监控NM的资源,以及集群的监控
RM 对 AM 的回应中,RM 生成container以及允许访问该资源的令牌
当有新的机器加入集群中,RM 也会通知 AM ,因此让AM 对该机器的资源进行请求
RM 对资源的调度尽量会依照数据本地化计算的,RM 调度有一个delay策略,在等待一定的时间,如果没有等到合适的资源,RM 会让 NM 强制的终止container
需要明确一下,RM不负责哪些工作:
RM 不负责协调application的执行,不负责task的容错
不负责监控application的状态和统计信息,不负责已经完成的jobs的具体的报告
Application Master(AM): 主要作业是管理作业的运行。为了启动container,AM向RM请求资源,请求的形式包括所需container的位置和性能参数。
一旦一个资源被分配给某个AM,RM会给该资源设置一个租约;
如果需要,正在运行的container可以通过 application-specific protocol 直接与AM进行通信,报道状态,接收framework-specific commands。
AM 将他们对资源的需求以以下形式给出:
1)、container的数量
2)、每个container所需的资源(2GB RAM,1 CPU)
3)、位置选项
4)、该请求在该application的优先级
AM 也是运行在一个container中,他会定时的给RM 发送心跳以确认他还存活着。
AM 在对作业进行调度的时候,如果AM 决定在某个container中运行一个map 任务 mi,那么将会减少对 存储mi任务所需数据的副本的 host 机器的请求需要。
Container : container是资源的抽象,比如一个container包含 (2GB 内存、1CPU)
NM :NM的作用是监控资源是否可用,报告异常,以及container的生命周期
NM 会对container进行授权,管理 container 的依赖,监控他们的执行,并未container提供多种服务。