Hadoop-Yarn介绍

Yarn的架构设计

Hadoop-Yarn介绍

  • ResourceManager (RM)
    负责对各NM上的资源进行统一管理和调度。
    将AM分配空闲的Container运行并监控其运行状态。
    对AM申请的资源请求分配相应的空闲Container。
    主要由两个组件构成: 调度器和应用程序管理器。
  • 调度器 (Scheduler)
    调度器根据容量、队列等限制条件(如每个队列分配一定的资源,最多执行一定数量的作业等),将系统中的资源分配给各个正在运行的应用程序。
    调度器仅根据各个应用程序的资源需求进行资源分配,而资源分配单位是Container,从而限定每个任务使用的资源量。
    Shceduler不负责监控或者跟踪应用程序的状态,也不负责任务因为各种原因而需要的重启(由ApplicationMaster负责)。
    总之,调度器根据应用程序的资源要求,以及集群机器的资源情况,为应用程序分配封装在Container中的资源。
    调度器是可插拔的,例如CapacityScheduler、FairScheduler。
  • 应用程序管理器 (Applications Manager)
    应用程序管理器负责管理整个系统中所有应用程序,包括应用程序提交、与调度器协商资源以启动AM、监控AM运行状态并在失败时重新启动等,跟踪分给的Container的进度、状态也是其职责。
  • NodeManager (NM)
    NM是每个节点上的资源和任务管理器。
    它会定时地向RM汇报本节点上的资源使用情况和各个Container的运行状态;同时会接收并处理来自AM的Container 启动/停止等请求。
  • ApplicationMaster (AM)
    用户提交的应用程序均包含一个AM,负责应用的监控,跟踪应用执行状态,重启失败任务等。
    ApplicationMaster是应用框架,它负责向ResourceManager协调资源,并且与NodeManager协同工作完成Task的执行和监控。
    MapReduce就是原生支持的一种框架,可以在YARN上运行Mapreduce作业。有很多分布式应用都开发了对应的应用程序框架,用于在YARN上运行任务,例如Spark,Storm等。如果需要,我们也可以自己写一个符合规范的YARN Application。
  • Container
    是YARN中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等,当AM向RM申请资源时,RM为AM返回的资源便是用Container 表示的。 YARN会为每个任务分配一个Container且该任务只能使用该Container中描述的资源。

Mapreduce-1 架构设计

Hadoop-Yarn介绍

  • Client: 客户端
  • JobTracker : 主要负责 资源监控管理和作业调度。
    • a.监控所有TaskTracker 与job的健康状况,一旦发现失败,就将相应的任务转移到其他节点;
    • b.同时JobTracker会跟踪任务的执行进度、资源使用量等信息,并将这些信息告诉任务调度器,而调度
      器会在资源出现空闲时,选择合适的任务使用这些资源.
  • TaskTracker: :是JobTracker与Task之前的桥梁
    • a.从JobTracker接收并执行各种命令:运行任务、提交任务、Kill任务、重新初始化任务;
    • b.周期性地通过心跳机制,将节点健康情况和资源使用情况、各个任务的进度和状态等汇报给
  • JobTracker.
    Task Scheduler: 任务调度器(默认 FIFO,先按照作业的优先级高低,再按照到达时间的先后选择被执
    行的作业)
  • Map Task: 映射任务
  • Reduce Task: 归约任务

Yarn工作流程(mr作业提交流程)

Hadoop-Yarn介绍

  • 1:用户向YARN中提交应用程序,其中包括ApplicationMaster程序、启动ApplicationMaster的命令、用户程序等。
  • 2:ResourceManager为该应用程序分配第一个Container,并与对应的Node-Manager通信,要求它在这个Container中启动应用程序的ApplicationMaster。
  • 3:ApplicationMaster首先向ResourceManager注册,这样用户可以直接通过ResourceManage查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤4~7。
  • 4:ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源。
  • 5:一旦ApplicationMaster申请到资源后,便与对应的NodeManager通信,要求它启动任务。
  • 6:NodeManager为任务设置好运行环境(包括环境变量、JAR包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。
  • 7:各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。在应用程序运行过程中,用户可随时通过RPC向ApplicationMaster查询应用程序的当前运行状态。
  • 8:应用程序运行完成后,ApplicationMaster向ResourceManager注销并关闭自己。
  • 总结:
    当用户向 YARN 中提交一个应用程序后, YARN 将分两个阶段运行该应用程序:
    • a. 第一个阶段是启动ApplicationMaster;
    • b. 第二个阶段是由ApplicationMaster创建应用程序,为它申请资源,并监控它的整个运行过程,直
      到运行完成。

Yarn常用命令

  • yarn application –list
    查看当前yarn应用程序的状态
  • yarn application –kill -applicationId {application ID}
    杀死当前yarn的工作进程

Yarn调优参数

【YARN中内存资源的调度和隔离】
  • yarn.nodemanager.resource.memory-mb
    NM节点的物理内存量,以MB为单位,可以分配给容器。如果设置为-1并且yarn.nodemanager.resource.detect-hardware-capabilities为true,则会自动计算(在Windows和Linux的情况下)。在其他情况下,默认值是8192MB。注意,如果你的节点内存资源不够8GB,则需要调减小这个值,而YARN不会智能的探测节点的物理内存总量。

  • yarn.scheduler.minimum-allocation-mb
    单个任务可申请的最少物理内存量,以MB为单位。 默认为1024MB。
    比这更低的内存请求会抛出一个InvalidResourceRequestException异常。
    如果一个任务申请的物理内存量少于该值,则该对应的值改为这个数。

  • yarn.scheduler.maximum-allocation-mb
    单个任务可申请的最多物理内存量,默认是8192(MB)。
    比这更高的内存请求会抛出一个InvalidResourceRequestException异常。

  • yarn.scheduler.increment-allocation-mb (CDH平台)
    内存增量,默认是2048MB。

  • yarn.nodemanager.pmem-check-enabled
    是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是true。

  • yarn.nodemanager.vmem-check-enabled
    是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true。

  • yarn.nodemanager.vmem-pmem-ratio
    在为容器设置内存限制时,虚拟内存与物理内存之间的比率。
    容器分配用物理内存来表示,而虚拟内存的使用率则可以超过这个比例。
    任务每使用1MB物理内存,最多可使用虚拟内存量,默认是2.1。

【YARN中CPU资源的调度和隔离】
  • yarn.nodemanager.resource.cpu-vcores
    表示该节点上YARN可使用的虚拟CPU个数,默认是8,注意,目前推荐将该值设值为与物理CPU核数
    数目相同。
    如果你的节点CPU核数不够8个,则需要调减小这个值,而YARN不会智能的探测节点的物
    理CPU总数。
    如果设置为-1,并且yarn.nodemanager.resource.detect-hardware-capabilities为true,则在Windows和Linux的情况下自动根据硬件确定。

  • yarn.scheduler.minimum-allocation-vcores
    单个任务可申请的最小虚拟CPU个数,默认是1,如果一个任务申请的CPU个数少于该数,则该对应的值改为这个数。

  • yarn.scheduler.maximum-allocation-vcores
    单个任务可申请的最多虚拟CPU个数,默认是32。
    设置:[4,32]


若泽数据: www.ruozedata.com
交流群: 707635769