YARN | 青训营笔记

104 阅读4分钟

这是我参与「第四届青训营 」笔记创作活动的第11天

一、 YARN

Apache Hadoop YARN 是开源 Hadoop 分布式处理框架中的资源管理和作业调度技术。作为 Apache Hadoop 的核心组件之一,YARN 负责将系统资源分配给在 Hadoop 集群中运行的各种应用程序,并调度要在不同集群节点上执行的任务。

YARN 的基本思想是将资源管理和作业调度/监视的功能分解为单独的 daemon(守护进程),其拥有一个全局 ResourceManager(RM) 和每个应用程序的 ApplicationMaster(AM)。应用程序可以是单个作业,也可以是作业的 DAG。

ResourceManager和 NodeManager构成了数据计算框架。 ResourceManager 是在系统中的所有应用程序之间仲裁资源的最终权限。NodeManager 是每台机器框架代理,负责 Containers,监视其资源使用情况(CPU,内存,磁盘,网络)并将其报告给 ResourceManager。

每个应用程序 ApplicationMaster 实际上是一个框架特定的库,其任务是协调来自 ResourceManager 的资源,并与 NodeManager 一起执行和监视任务。

在 YARN 体系结构中,ResourceManager 作为守护程序运行,作为架构中的全局的 master 角色,通常在专用计算机上运行,它在各种竞争应用程序之间仲裁可用的群集资源。ResourceManager 跟踪群集上可用的活动节点和资源的数量,并协调用户提交的应用程序应获取哪些资源以及事件。ResourceManager 是具有此信息的单个进程,因此它可以以共享,安全和多租户的方式进行调度决策(例如,根据应用程序优先级,队列容量,ACL,数据位置等)。

当用户提交应用程序时,将启动名为 ApplicationMaster 的轻量级进程实例,以协调应用程序中所有任务的执行。这包括监视任务,重新启动失败的任务,推测性地运行慢速任务以及计算应用程序计数器的总值。ApplicationMaster 和属于其应用程序的任务在 NodeManagers 控制的资源容器中运行。

NodeManager 有许多动态创建的资源容器。容器的大小取决于它包含的资源量,例如内存、CPU、磁盘和网络IO。目前,仅支持内存和CPU。节点上的容器数是配置参数和用于守护程序及OS的资源之外的节点资源总量(例如总CPU和总内存)的乘积。 ApplicationMaster 可以在容器内运行任何类型的任务。例如,MapReduce ApplicationMaster 请求容器启动 map 或 reduce 任务,而 Giraph ApplicationMaster 请求容器运行 Giraph 任务。您还可以实现运行特定任务的自定义 ApplicationMaster

在 YARN 中,MapReduce 简单地降级为分布式应用程序的角色(但仍然是非常流行且有用的),现在称为MRv2。

此外,YARN 通过 ReservationSystem 支持资源预留的概念,ReservationSystem 允许用户通过配置文件来指定资源的时间和时间约束(例如,截止日期)的,并保留资源以确保重要作业的可预测执行。ReservationSystem 可跟踪资源超时,执行预留的准入控制,并动态指示基础调度程序确保预留已满。

ApplicationMaster

每当 Client 提交一个 Application 时候,就会新建一个 ApplicationMaster 。由这个 ApplicationMaster 去与 ResourceManager 申请容器资源,获得资源后会将要运行的程序发送到容器上启动,然后进行分布式计算。

这里可能有些难以理解,为什么是把运行程序发送到容器上去运行?如果以传统的思路来看,是程序运行着不动,然后数据进进出出不停流转。但当数据量大的时候就没法这么玩了,因为海量数据移动成本太大,时间太长。但是中国有一句老话山不过来,我就过去。 大数据分布式计算就是这种思想,既然大数据难以移动,那我就把容易移动的应用程序发布到各个节点进行计算呗,这就是大数据分布式计算的思路。

NodeManager

NodeManager 是 ResourceManager 在每台机器的上代理,负责容器的管理,并监控他们的资源使用情况(cpu,内存,磁盘及网络等),以及向 ResourceManager/Scheduler 提供这些资源使用报告。