- JobTracker 是 Map-reduce 的集中处理点,存在单点故障。
- JobTracker 完成了太多的任务,造成了过多的资源消耗,当 map-reduce job 非常多的时候,会造成很大的内存开销,潜在来说,也增加了 JobTracker fail 的风险,这也是业界普遍总结出老 Hadoop 的 Map-Reduce 只能支持 4000 节点主机的上限。
- 在 TaskTracker 端,以 map/reduce task 的数目作为资源的表示过于简单,没有考虑到 cpu/ 内存的占用情况,如果两个大内存消耗的 task 被调度到了一块,很容易出现 OOM。
- 在 TaskTracker 端,把资源强制划分为 map task slot 和 reduce task slot, 如果当系统中只有 map task 或者只有 reduce task 的时候,会造成资源的浪费,也就是前面提过的集群资源利用的问题。
- 源代码层面分析的时候,会发现代码非常的难读,常常因为一个 class 做了太多的事情,代码量达 3000 多行,,造成 class 的任务不清晰,增加 bug 修复和版本维护的难度。
- 从操作的角度来看,现在的 Hadoop MapReduce 框架在有任何重要的或者不重要的变化 ( 例如 bug 修复,性能提升和特性化 ) 时,都会强制进行系统级别的升级更新。更糟的是,它不管用户的喜好,强制让分布式集群系统的每一个用户端同时更新。这些更新会让用户为了验证他们之前的应用程序是不是适用新的 Hadoop 版本而浪费大量时间。
MapReduce 2.0(MR 2.0) YARN框架
MR v2是一套应用编程接口,兼容MR v1,根据MR v1接口编写的程序仅需重新编译即可。Hadoop 2.x系统的底层架构完全改变了,Hadoop 1.x中的JobTracker承担的两个功能:
- 资源管理
- 任务调度/监控
YARN把这个两个功能分为两个守护进程来承担。系统有一个全局的资源管理器和每个程序的应用程序管理器。在Hadoop 2.x系统中,一个程序既可以指一个单独的Mapreduce作业,也可指一系列作业组成的有向无环图(一个有许多节点相连构成的图,图中无循环)。
YARN系统的组成:
- 全局资源管理器(Global Resource Manager):RM
- 节点管理器(Node Manager):NM
- 应用程序管理器(Application Master):AM
- 调度器(Scheduler)
- 容器(Container)
一部分CPU和一部分内存后吃一个容器。一个应用程序运行在一组容器中。AM的一个实例会向RM请求获取资源。调度器会通过每个节点的NM来分配资源(容器)。NM会向RM汇报每个容器的使用情况。
RM和NM构成了新MapReduce框架的管理系统。RM全权负责系统资源的分配。每种应用程序都有一个AM。针对同一应用程序类型的所有应用程序,一个AM实例被初始化,AM实例会向RM协商获取容器来运行作业。RM利用调度器与每个节点的NM的沟通情况来分配资源。从系统角度上看,AM也是运行在一个容器中的。
1. 容器(Container)
容器是YARN框架的计算单元。它是一个任务进行工作的单元子系统。YARN框架中的容器相当于MapReduce v1中的一个任务执行器。集群节点与容器的关系:一个节点可以运行多个容器,但一个容器只能运行在一个节点内。
一个容器就是已分配的一组系统资源。目前支持两种类型的系统资源:CPU核和内存(MB)
请求一个容器时,就会向一个节点发出请求,容器使得程序可以在某个节点上获得指定数量的CPU内核和一定数量的内存。
2. 节点管理器(NodeManager)
NM运行在集群的一个节点上,集群中每个节点都运行一个自己的NM。它作为一个从属服务:接受来自RM组件的请求,然后分配容器给应用程序。它负责监控和汇报资源使用情况给RM。在Hadoop集群中,NM与RM协同工作,负责管理分配Hadoop系统资源。NM的主要任务:
- 接受来自RM的请求,为作业的执行分配容器;
- 与RM通信,确保整个集群稳定运行。RM依靠各个NM的汇报来跟踪整个集群的健康情况,NM作为代理来监控和管理本节点的健康情况;
- 管理每个已启动的容器的整个生命周期;
- 每个节点的日志管理;
- 运行各种YARN应用程序使用的服务服务。
当一个节点启动时,它会向RM注册,并告知RM有多少资源(最终可分配给容器的资源)可用。
3. 资源管理器(ResourceManager)
RM的核心是一个调度器:当多个应用程序竞争使用集群资源时,它来负责资源的分配调度,确保集群资源的优化合理使用。RM有一个插件化的调度器该调度器按照程序队列和集群的处理能力,负责为正在运行的多个应用程序分配其所需的集群资源。Hadoop自带了计算能力调度器和公平调度器。
4. 应用程序管理器(Application Master)
AM是一个特定的框架函数库。它同RM协调沟通资源,并通过NM来获取这些系统资源,然后执行任务。AM就是与RM沟通以获得系统资源的组件。
5. 分步详解YARN请求
当客户端向Hadoop 2.x框架提交一份作业,YARN框架后台处理该请求,步骤如下:
- 一个客户端提交作业程序。该应用程序类型确定了,就决定了使用哪种AM;
- RM协调资源,在一个节点上获取一个用于运行RM实例的容器;
- AM在RM注册。注册后,客户端就可以向RM查询该AM的详细信息。客户端会与AM通信;
- 在这个操作过程中,AM通过资源请求与RM协商资源。除了其他内容,一个资源请求包括被请求的容器所在的节点和该容器的详细说明(CPU核资源和内存大小);
- 在启动的容器中运行的应用程序会通过该应用程序特定的协议向AM汇报它的执行情况;
- 通过应用程序特定的协议,客户端与AM通信。客户端通过查询在步骤3注册的RM的信息可找到对应的AM。