Hadoop2.0

由HDFS,MR,YARN三部分组成。其中HDFS:支持NN Federation、HA。

MapReduce:运行在YARN上的MR,编程模型不变。

YARN:资源管理系统。

yarn获取历史任务的耗时时间_yarn获取历史任务的耗时时间

YARN框架

 

yarn获取历史任务的耗时时间_资源分配_02

  1. ResourceManager:处理客户端请求,启动/监控ApplicationMaster,监控NodeManager,资源分配与调度。
  2. NodeManager:单个节点上的资源管理,处理来自ResourceManager的命令,处理来自ApplicationMaster的命令。
  3. ApplicationMater:数据切分,为应用程序申请资源,并分配给内部任务,任务监控。

MRv2任务管理

MRv2的运行环境有YARN提供,YARN将MRv1的TaskTrack拆分为resourceManager(主要负责各节点的运行情况合理地分配资源)和 applicationManager(负责单一任务的调度以及向resourceManager请求资源)。如果集群中有多个作业,则需要多个applicationManager,解决负载过重问题。

MRv2任务流程

yarn获取历史任务的耗时时间_yarn获取历史任务的耗时时间_03

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

Yarn调度框架

  • 双层调度框架

RM将资源分配给AM,AM将资源进一步分配给各个Task

  • 基于资源预留的调度策略

资源不够时,会给Task预留,知道资源充足。

  • YARN资源调度器

核心概念:Container——支持COU和内存两种资源调度方式,允许配置每个节点、每个任务可以用的CPU和内存资源总量(代码直接实现)。

提供多种资源调度其:FIFO,Fair Scheduler,Capacity Scheduler……

多租户资源调度器:支持资源按比例分配,支持层级队列划分方式,支持资源抢占。

yarn获取历史任务的耗时时间_资源调度_04

  • YARN资源隔离方案

支持内存和CPU两种资源隔离:内存是“关键!”的资源,CPU是“影响速度”的资源。

内存隔离:1.基于线程监控的方案。2.基于Cgroups的方案。

CPU隔离:默认不对CPU资源进行隔离,基于Cgroups的方案。

YARN支持的框架

yarn获取历史任务的耗时时间_资源分配_05