首先介绍一下老的MapReduce的机制,老的MapReduce的具体流程如下,
JobClient提交Job给Job Tracker,Job Tracker与集群所有机器通信(heartbeat),管理所有job失败、重启等操作。Task Tracker是在每一台机器上都有的,主要用来监视自己所在机器的task运行情况及机器的资源情况,然后把这些信息通过heartbeat发送给Job Tracker。
MapReduce存在的问题:
1 Job Tracker 存在单点故障
2 Job Tracker 完成太多任务,当MR任务非常多时,造成很大的内存开销
3 Task Tracker 端,如果两个大内存消耗的任务一起调度,容易出现OOM,如果只有Map任务或Reduce任务时会造成资源浪费
下面介绍一下YARN的机制及与MapReduce相比的优势,
老的MapReduce主要包括Job Tracker和Task Tracker,YARN中主要是三个组件:Resource Manager、Node Manager和Application Master。Resource Manager负责全局资源分配,Application Master每个节点一个,负责当前节点的调度和协调。Node Manager是每台机器的代理,监控应用程序的资源使用情况,并汇报给Resource Manager。因此与老的MapReduce相比,YARN把资源管理与任务调度的工作分离开来,减少了MapReduce中Job Tracker的压力。
从以上介绍可以看出,相比于MapReduce,YARN主要优势如下,
1 YARN大大减少了Job Tracker的资源消耗,并且让监测每个Job子任务状态的程序分布式化了。
2 YARN中Application Master是一个可变更部分,用户可以对不同编程模型编写自己的AppMst,让更多类型的编程模型能跑在Hadoop集群中。
3 老的框架中,Job Tracker一个很大的负担就是监控Job下任务的运行状况,现在由Application Master去做,而Resource Manager是监测Application Master的运行状况,如果出问题,会将其在其他机器上重启。