Hadoop 2.x 引入Yarn 对资源进行管理。替换1.x 中的JobTracker, TaskTracker
    yarn 架构图:
    image.png
    模型:
    container容器[资源管理抽象出来的对象, 属性: cpu, mem, io量]。
    实现: 架构/框架
    ResourceManager[主]: 负责整体资源的管理
    NodeManager[从]: 想rs汇报心跳, 提交自己的资源情况

    MR运行 MapReduce on yarn

    1. MR-cli [切片清单, 配置, jar, 上传到HDFS]
    2. RM 选择一台不忙的节点通知NM启动一个Container, 在里面反射一个MRAppMaster
    3. 启动MRAppMaster, 从hdfs 下载切片清单, 向RM 申请资源
    4. 由RM 根据自己掌握的资源情况得到一个确定清单。通知NM来启动container
    5. container 启动后会反向注册到已经启动的MRAppMaster进程
    6. MRAppMaster 最终将任务Task 发送给Container
    7. container 会反射响应的Task类为对象,调用方法执行。也就是执行我们的业务逻辑代码。
    8. 计算框架都有Task 失败重试的机制。

    结论:
    问题:

    1. 单点故障[曾经是全局的, JobTracker挂掉了, 整个计算层没有了调度]
      1. yarn: 每一个app 由一个自己的AppMaster 调度
      2. yarn 支持AppMaster 失败重试。
    2. 压力过大
      1. yarn 中每个计算程序自有AppMaster, 每个AppMaster 只负责自己计算程序的任务调度。
    3. 集成[资源管理和任务调度], 两者耦合
      1. Yarn 只是资源管理, 不负责具体的任务调度。