Hadoop 2.x 引入Yarn 对资源进行管理。替换1.x 中的JobTracker, TaskTracker
yarn 架构图: 
模型:
container容器[资源管理抽象出来的对象, 属性: cpu, mem, io量]。
实现: 架构/框架
ResourceManager[主]: 负责整体资源的管理
NodeManager[从]: 想rs汇报心跳, 提交自己的资源情况
MR运行 MapReduce on yarn
- MR-cli [切片清单, 配置, jar, 上传到HDFS]
- RM 选择一台不忙的节点通知NM启动一个Container, 在里面反射一个MRAppMaster
- 启动MRAppMaster, 从hdfs 下载切片清单, 向RM 申请资源
- 由RM 根据自己掌握的资源情况得到一个确定清单。通知NM来启动container
- container 启动后会反向注册到已经启动的MRAppMaster进程
- MRAppMaster 最终将任务Task 发送给Container
- container 会反射响应的Task类为对象,调用方法执行。也就是执行我们的业务逻辑代码。
- 计算框架都有Task 失败重试的机制。
结论:
问题:
- 单点故障[曾经是全局的, JobTracker挂掉了, 整个计算层没有了调度]
- yarn: 每一个app 由一个自己的AppMaster 调度
- yarn 支持AppMaster 失败重试。
- 压力过大
- yarn 中每个计算程序自有AppMaster, 每个AppMaster 只负责自己计算程序的任务调度。
- 集成[资源管理和任务调度], 两者耦合
- Yarn 只是资源管理, 不负责具体的任务调度。
