Hadoop ---- YARN

Hadoop —- YARN

  1. YARN 概述
    • YARN 是一种分布式操作系统(Distributed Operating System,DOS),主要作用为:提供用户接口、管理分布式系统资源、控制分布式程序运行(任务调度)。
    • YARN 采用 master/slave 架构,slave(NodeManager)进程负责管理本机资源,master(ResourceManager)负责汇总分配各个 slave 上报的资源信息。

Hadoop ---- YARN_第1张图片

  1. ResourceManager

    • ResourceManager 中主要的四大模块
      • 客户接口模块(主要接口有:web 接口、shell 接口以及 JavaAPI 接口)
      • 资源管理模块(汇总各个 slave 上报的资源信息,RTS)
        • YARN 把一定量的各类资源抽象成为一个逻辑概念 Container (容器)。
        • 比如,统一规定 <1core,2G> 为一个 Container 。就是说分配、汇总资源时以此为单位。假如,一 slave 机器为 2 核心、4G 内存,该机器上的 NodeManager 进程向 ResourceManager 汇报时就可直接说是 2个 Container。分配时,亦同。这样,大大简化了资源管理模块。
      • 任务调度器(核心,Schedule)
        • 支持的调度策略
          • FIFO
          • Fair:公平(How to do?
          • Capacity:不管当前有多少 application ,只要集群内还有计算资源,都分配给这些应用程序,以确保这些应用程序同时运行。
        • 三大调度策略可以嵌套配置(通过队列,How to do?),此外 YARNSchedule 支持热插拔,可动态配置调度器。
      • 任务启动模块(ApplicationsManager)
        • 负责管理所有 ApplicationMaster 。理论上一个 ApplicationMaster 对应一个 Yarn-App.
        • 当 ResourceManager 接收到新任务(新的 Yarn-App)时,由任务启动模块使用资源管理模块选择一空闲 Container,并在此 Container 上执行应用程序主服务(slave 主机上)。
    • ResourceManager 与 NodeManager 之间使用 定期心跳包 进行通信。
  2. NodeManager

    • ApplicationManager
      • ApplicationManager 其实是 Container 上运行的一个实例(程序)。把它单独出来说明是因为,它相当于 Yarn-App 的主线程(指挥部)。
      • 由它向 ResourceManager 申请资源。且它得到 ResourceManager 授权后,由它与其他 NodeManager 通信,要求 NodeManger 分配启动对应的 Container。当然,这里面存在令牌验证等安全机制。
    • NodeManager 中主要的两大模块
      • ContainerManager 模块
        • 监控 Container 状态
        • 向 ResourceManager 汇报
      • ContainerExcutor 模块(用于启动 Container)
  3. YARN 编程(编写 Yarn-App)

    • 编程的内容分三部分
      • ApplicationBusinessLogic
        • 主要写业务逻辑
        • 由所属并行化范式,确定 ApplicationBusinessLogic 的最终结构
      • ApplicationClient
        • 提供接口
        • 通用性较强,一般由公司的优秀程序员开发
      • ApplicationMaster
        • 涉及 Container 分层等,很复杂
        • 一般由公司的优秀程序员开发
    • 重头开始编写 Yarn-App 很复杂,实际使用时可以借鉴
      • M 范式:DistributedShell
      • M-S-R 范式:MapReduce 框架、Spark 框架
      • BSP 范式:Giraph 框架
  4. 其他一些重要概念或思想

    • 常见并行化范式
      • M 范式:把全部数据等分成 n 分,各机器(进程)独立处理一份。
      • MSR 范式:MapReduce 模型。适合 IO 密集型的松耦合操作,适合全局数据而非增量数据。
      • BSP 范式(整体同步并行计算模型)
        • 适合处理 CPU 密集型的 紧耦合 操作(如,统计机器学习算法、图处理)。
        • 思想:各超步之间串行执行,超步内则并行执行(超步内分有很多块)。
    • 先并行化后线程化
      • 并行化指的是把任务分到不同的机器上;
      • 线程化则为在同一机器内并发处理对应的任务;

你可能感兴趣的:(Hadoop ---- YARN)