为了解决Hadoop 1. 0 中JobTracker 访问压力过大而影响系统的扩展性,不支持除了MapReduce的其他计算框架等问题,Hadoop 2.0 对MapReduce 架构进行了重构,它将资源管理和作业控制分开,分别由ResourceManager(负责所有应用程序的资源分配)和ApplicationMaster(负责管理一个应用程序)实现,即引入了资源管理框架YARN。Hadoop 2.0 中的MapReduce可以称为MapReduce V2 或YARN。
Apache Hadoop YARN 是Hadoop 2.0 中的资源管理系统,它依旧采用了主从架构,从图6.3的YARN 架构图可以看出,YARN 主要是由ResourceManager、NodeManager、ApplicationMaster 和Container 等几个组件构成。ResourceManager 为master 节点,NodeManager 为slaver 节点,Resource Manager 主要负责对Node Manager 上的资源进行统一的管理与调度。
当用户Client 提交一个应用程序时,Client 向ResourceManager 提交的每个应用程序都必须存在一个App Master,它负责向ResourceManager 申请资源,并要求NodeManger 启动可以占用一定资源的任务。由于不同的App Master 被分布到不同的节点上,因此,它们之间不会相互影响。
(1)资源容器(Container)
图6.3 YARN 架构图
Container 是YARN 框架中的资源,它可以理解为组成系统的一个资源单元。例如:内存分片、CPU 核心数、网络带宽和硬盘空间等。每个slaver 节点由多个512 MB 或1 GB 大小的内存容器组成。当应用管理器(ApplicationManager)向资源管理器(ResourceManager)申请资源时,资源管理器返回的资源使用Container 表示,且YARN 为每个任务分配一个Container。
(2)资源管理器(ResourceManager)
ResourceManager 是一个全局的资源管理器,负责整个系统的资源管理与分配。它主要由资源调度器(Scheduler)和应用管理器(ApplicationManager)两个组件构成。
1)调度器
调度器是根据集群中的容量、队列和资源等限制,将资源分配给各个正在运行的应用。调度器根据每个应用的资源需求和集群各个节点的资源容器进行调度。需要注意的是:该调度器仅负责资源的分配,不负责监控各个应用执行情况(任务失败、应用失败、硬件失败)的重启任务。
2)应用管理器
应用管理器负责整个系统中所有应用程序,包括应用程序提交、调度器协调资源启动(ApplicationMaster)、监控应用运行情况并重新启动等。
(3)节点管理器(NodeManager)(www.xing528.com)
NodeManager 是每个节点上的资源和任务管理器,它运行在每个集群的节点上,其主要负责与ResourceManager 配合进行整个集群的资源分配工作,并监控运行节点的健康状态。它的工作主要有以下几个方面:
①接收ResourceManager 的请求,为每个应用分配Container。
②与ResourceManager 交换信息以确保整个集群平稳运行。ResourceManager 就是通过收集每个NodeManager 的报告信息来追踪整个集群健康状态的,而NodeManager 负责监控自身的健康状态。
③管理每个Container 的生命周期。
④管理每个节点上的日志。
⑤执行YARN 上面应用的一些额外的服务,例如MapReduce 的Shuffle 过程。
(4)应用主体(ApplicationMaster)
ApplicationMaster 是应用主体,它与用户提交的每个应用程序是一一对应的,Application-Master 的主要作用是向ResourceManager 申请资源并与NodeManager 协同工作来运行应用的各个任务,然后跟踪它们的状态及监控各个任务的执行,遇到失败的任务还负责重启它。它的工作主要负责以下几个方面:
①与ResourceManager 调度器协商获取资源。
②与NodeManager 合作,在合适的容器中运行对应的组件,并监控这些任务的执行。
③如果容器Container 出现故障,ApplicationMaster 会重新向调度器申请其他资源。
④计算应用程序所需要的资源量,并转化为调度器可识别的协议信息包。
⑤在应用主体出现故障后,应用管理器会负责重启它。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。