简介
YARN(Yet Another Resource Negotiator),下一代MapReduce框架。该框架已经不再是一个传统的MapReduce框架,是一个通用的运行时框架,用户可以编写自己的计算框架,在该运行环境中运行。
MapReduce v1的不足
- JobTracker职责太多(资源分配模型)
- JobTracker具有两种不同的职责:
- 资源管理。这涉及到维护活动节点列表、可用和已用的map和 reduce slot列表,以及依据所选的调度策略将可用slots分配给合适的作业和任务。
- 任务调度和任务监控。这涉及到指导TaskTracker启动map和reduce任务,监视任务的执行,重新启动失败的任务,推测性地运行缓慢的任务,等等。
- JobTracker是集群事务的集中处理点,存在单点故障;
- JobTracker需要完成的任务太多,既要维护job的状态又要维护task的状态;
- JobTracker具有两种不同的职责:
- TaskTracker上的资源强制划分为map slot、reduce slot(资源表示模型)
- 用map slot、reduce slot作为资源的表示过于简单,没有考虑到CPU、内存等资源情况,当把两个需要消耗大内存的task调度到一起,很容易出现OOM;
- 当只有map task时,reduce slot不能用;当只有reduce task时,map slot不能用,容易造成资源利用不足;
YARN的改进
- Clien
(1) 提交任何支持YARN的Application
- ResourceManager
(1) 持续跟踪活着的NodeManager和可用资源
(2) 给Application和Task分配合适的资源
(3) 监视所有的Application Master
- NodeManager
(1) 以Container的形式提供计算资源
(2) 管理运行在Container中的进程
- Application Master
(1) 协调此Application所拥有的所有Task的运行
(2) 请求合适的Container运行Task
- Container
(1) 可以运行不同类型的任务(包括Application Master)
(2) 有不同的大小属性,例如,内存、CPU
综上,Yarn将之前JobTracker监控和协调Tasks的运行状况的责任扔给了ApplicationMaster,而ResourceManager中有一个ApplicationsMasters组件,这个组件来监测所有ApplicationMaster的运行状况。
重构根本的思想是将JobTracker两个主要的功能,资源管理、任务调度和任务监控,分离成单独的组件。就是将JobTracker的功能分成ResourceManager、ApplicationsMasters、ApplicationMaster,而将ApplicationMaster剥离JobTracker。TaskTracker分成NodeManager和Container,并将运行任务的Container剥离TaskTracker。