Hadoop_Yarn架构详解

Yarn架构概述
Yarn Shell操作
Yarn 高可用的配置

Yarn 架构概述

* 直接源于MRv1的缺陷(原MapReduce框架的不足)
    * JobTracker是集群事务的集中处理点,存在单点故障(一个失败,全部受影响)
    * JobTracker需要完成的任务太多,既要维护job的状态又要维护job的task的状态,造成过多的资源消耗(扩展性受限)
* 在taskTracker端,用map/reduce task作为资源的表示过于简单,没有考虑到cpu、内存等资源情况,当把两个需要消耗大内存的task调度到一起,很容易出现OOM
* 把资源强制划分为map/reduce slot,当只有map task时,reduce slot不能用;当只有reduce task时,map slot不能用,容易造成资源利用不足。(多计算框架各自为战,数据共享困难).

Hadoop Yarn基本架构

* Yarn 各模块组成
    * ResourceManager
        * 处理客户端请求
        * 启动/监控ApplicationMaster
        * 监控NodeManager
        * 资源分配与调度
    * NodeManager
        * 单个节点上的资源管理
        * 处理来自ResourceManager的名年龄
        * 处理来自ApplicationMaster的命令
    * ApplicationMaster
        * 数据切分
        * 为应用程序申请资源,并分配给内部任务
        * 任务监控与容错
* Yarn的容错
    * ResourceManager
        * 存在单点故障
        * 2.X版本基于ZooKeeper实现HA
    * NodeManager
        * 失败后,RM将失败任务告诉对应的AM
        * AM决定如何处理失败的任务
    * ApplicationMaster
        * 失败后,由RM负责重启,AM需处理内部任务的容错问题
- Hadoop Yarn调度框架
    * 双层电镀框架
        * RM将资源分配给AM
        * AM讲资源进一步分配给各个Task
    * 基于资源预留的调度策略
        * 资源不足时,会为Task预留,知道资源充足
        * 与“all or nothing”策略不同(Apache Mesos)
    * HadoopYarn资源调度器
        * 多类型资源调度
            * 采用DRF算法
            * 目前只支持CPU和内存两种资源
        * 提供多种资源调度器
            * FIFO:先进先出
            * Fair Scheduler:公平调度器
            * Capacity Scheduler:容量调度器
            * 多租户资源调度器
                * 支持资源按比例分配
                * 支持层级队列划分方式
                * 支持资源抢占
    * Hadoop Yarn 的资源隔离方案
        * 支持内存和CPU两种资源隔离
            * 内存是一种 “决定生死`” 的资源(集群内存不够,内存一处,任务崩溃)
            * CPU是一种 “你更想快慢” 的资源
        * 内存隔离
            * 基于县城监控的方案
            * 基于Cgroups的方案
        * CPU隔离
            * 默认不对CPu资源进行隔离
            * 基于Cgroups的方案
    * Hadoop Yarn资源调度语义
        * 支持的语义
            * 请求某个铁定节点/机架上的特定资源量
            * 讲某些节点加入或移除黑名单,不再自己分配这些节点上的资源
            * 请求归还某些资源
        * 部支持的语义
            * 请求任意节点/机架上的特定资源量
            * 请求一组或几组符合某种特质的资源
            * 超细粒度资源
            * 动态调整Container资源
* 运行在Yarn上的计算框架
    * 离线计算框架:MapReduce(处理海量数据)
    * DAG计算框架:Tez
    * 流式计算框架:Storm:(处理流式数据)
    * 内存计算框架:Spark(因为基于内存处理,所以特别快)
    * 图计算框架:Giraph、GraphLib

运行在Yarn上的计算框架(MapReduce, Spark)AM

* 框架
    * 离线计算框架:MapReduce(处理海量数据)
    * DAG计算框架:Tez
    * 流式计算框架:Storm:(处理流式数据)
    * 内存计算框架:Spark(因为基于内存处理,所以特别快)
    * 图计算框架:Giraph、GraphLib
* Yarn应用程序类型
    * 长应用程序
        * Service、HTTP Server等
    * 短应用程序
        * MR job、Spark Job等。

Yarn 的发展前景

* 服务自动化部署(集群一键安装)
* 调度框架的完善
    * 支持更多的资源类型(网络、磁盘等)
    * 支持更多的调度语义
* 长作业的在线升级
    * storm的在吸纳升级
    * Container资源动态调整
* 容错机制
    * ResourceMapager自身容错
    * NOdeManager宕机,任务不受影响
    * ApplicationMaster个性化容错