深入Hadoop之YARN

Hadoop 1.X && Hadoop 2.X 区别

深入Hadoop之YARN
Hadoop 1.X
由分布式存储系统HDFS和分布式计算框架MapReduce组成,其中,HDFS由一个NameNode和多个DataNode组成,MapReduce由一个JobTracker和多个TaskTracker组成。
Hadoop 2.X
为克服Hadoop 1.X中HDFS和MapReduce存在的各种问题而提出的。针对Hadoop 1.X中的单NameNode制约HDFS的扩展性问题,提出了HDFS Federation,它让多个NameNode分管不同的目录进而实现访问隔离和横向扩展,同时它彻底解决了NameNode 单点故障问题;针对Hadoop 1.X中的MapReduce在扩展性和多框架支持等方面的不足,它将JobTracker中的资源管理和作业控制功能分开,分别由组件ResourceManager和ApplicationMaster实现,其中,ResourceManager负责所有应用程序的资源分配,而ApplicationMaster仅负责管理一个应用程序,进而诞生了全新的通用资源管理框架YARN。基于YARN,用户可以运行各种类型的应用程序,从离线计算的MapReduce到在线计算(流式处理)的Storm等。

YARN架构

YARN是一个资源管理、任务调度的框架。
主要包含三大模块
ResourceManager:主要负责所有资源的监控、分配和管理。
ApplicationMaster:负责每一个具体应用程序的调度和协调。
NodeManager:负责每一个节点的维护。
对于所有的applications,ResourceManager拥有绝对的控制权和对资源的分配权。而每个ApplicationMaster则会和ResourceManager协商资源,同时和NodeManager通信来执行和监控task。
YARN运行流程图
深入Hadoop之YARN
1、client向YARN中提交应用程序,其中包括启动该应用的ApplicationMaster的必须信息,例如ApplicationMaster程序、启动ApplicationMaster的命令等。
2、ResourceManager为该应用程序分配第一个Container(这里可以理解为一种资源比如内存),并与对应的Node-Manager通信,要求它在这个Container中启动应用程序的ApplicationMaster。
3、ApplicationMaster首先向ResourceManager注册,这样用户可以直接通过ResourceManage查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤4~7
4、ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请相应数目的container。
5、ResourceManager返回ApplicationMaster的申请的containers信息。申请成功的container,由ApplicationMaster进行初始化。container的启动信息初始化后,ApplicationMaster与对应的NodeManager通信,要求NodeManager启动container。ApplicationMaster与NodeManager保持心跳,从而对NodeManager上运行的任务进行监控和管理。
6、container运行期间,ApplicationMaster对container进行监控。container通过RPC协议向对应的ApplicationMaster汇报自己的进度和状态等信息。
7、各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。在应用程序运行过程中,用户可随时通过RPC向ApplicationMaster查询应用程序的当前运行状态。
8、应用运行结束后,ApplicationMaster向ResourceManager注销自己,并允许属于它的container被收回。

ResourceManager

1、ResourceManager负责整个集群的资源管理和分配,是一个全局的资源管理系统。
2、NodeManager以心跳的方式向ResourceManager汇报资源使用情况(目前主要是CPU和内存的使用情况)。ResourceManager只接收来自NodeManager的资源和节点状态汇报,并向NodeManager下达管理资源命令,对于具体的资源处理则交给NodeManager自己处理。
3、YARN Scheduler根据application的请求为其分配资源,不负责application job的监控、追踪、运行状态反馈、启动等工作。

NodeManager

1、NodeManager是每个节点上的资源和任务管理器,它是管理这台机器的代理,负责该节点程序的运行,以及该节点资源的管理和监控。YARN集群每个节点都运行一个NodeManager。
2、NodeManager定时向ResourceManager汇报本节点资源(CPU、内存)的使用情况和Container的运行状态。当ResourceManager宕机时NodeManager自动连接ResourceManager备用节点。
3、NodeManager接收并处理来自ApplicationMaster的Container启动、停止等各种请求。

ApplicationMaster

1、用户提交的每个应用程序均包含一个ApplicationMaster,它可以运行在ResourceManager以外的机器上。
负责与ResourceManager调度器协商以获取资源(用Container表示)。
2、将得到的任务进一步分配给内部的任务(资源的二次分配)。
3、与NodeManager通信以启动/停止任务。
4、监控所有任务运行状态,并在任务运行失败时重新为任务申请资源以重启任务。
5、当前YARN自带了两个ApplicationMaster实现,一个是用于演示ApplicationMaster编写方法的实例程序DistributedShell,它可以申请一定数目的Container以并行运行一个Shell命令或者Shell脚本;另一个是运行MapReduce应用程序的ApplicationMaster。

Container

1、YARN中的资源抽象,封装某个节点上多维资源如内存、CPU、磁盘、网络等,当ApplicationMaster向ResourceManager申请资源时,ResourceManager向ApplicationMaster返回的资源便是用Container表示的。
2、YARN会为每个任务分配一个Container,且该任务只能使用该Container中描述的资源。