YARN 是做什么的
YARN 在 Hadoop 中的功能作用有两个,第一是负责 Hadoop 集群中的资源管理(resource management),第二是负责对任务进行调度和监控(scheduling/monitoring)。YARN 分别提供了相应的组件完成这两项工作。
如何管理资源
YARN 在管理资源上采用的是 master/slave 架构。在整个 YARN 集群中,在其中一个节点上运行 ResourceManager 进程作为 master,其余每个节点上都运行一个 NodeManager 进程作为 slave。ResourceManager 负责对集群中的所有资源进行统一的管理和调度。NodeManager 进程负责单个节点上的资源管理,它监控一个节点上的资源使用情况 (如 cpu,内存,硬盘,网络等) 并将其 report 给 ResourceManager。ResourceManager 有两个主要的组件:Scheduler 和 ApplicationsManager。其中的 Scheduler 就负责为集群中运行的各个 application 分配所需要的资源。Scheduler 只负责资源的调度,它不做任何对 application 监控或跟踪的工作,此外,在任务由于各种原因执行失败时,它也不负责对任务进行重启。Scheduler 根据 application 对资源的需求执行其资源调度功能。它将 cpu、内存、硬盘、网络等资源合并成一个整体,抽象成 Container 进行资源分配。Container 就是 Scheduler 进行资源分配的一个单位,也是运行在 slave 节点上的一个组件。此外,Scheduler 是一个可插拔的组件,用户可根据自己的需要设计新的 Scheduler,YARN 提供了多种可直接使用的调度器,比如 Fair Scheduler 和 Capacity Scheduler 等。
如何调度 / 监控任务
ApplicationMaster 组件负责跟踪和管理一个 application,它负责为 application 向 ResourceManager 中的 Scheduler 组件申请资源,并通过 NodeManger 启动和监控一个任务。当向 ResourceManager 提交一个 application 时,必须为其指定一个 ApplicationMaster 组件。ResourceManager 中的 ApplicationsManager 组件会对所有应用程序的 ApplicationMaster 进行管理,它首先会为 ApplicationMaster 组件分配资源,使其运行在一个 slave 节点的 Container 中。并负责监控 ApplicationMaster 的运行状态,在 Container 出现异常时对 ApplicationMaster 进行重启。ApplicationsManager 负责管理整个集群中的所有 application,包括 application 提交、与 Scheduler 协商资源以启动 ApplicationMaster、监控 ApplicationMaster 运行状态并在失败时重新启动它等。