Hadoop2.0
由HDFS,MR,YARN三部分组成。其中HDFS:支持NN Federation、HA。
MapReduce:运行在YARN上的MR,编程模型不变。
YARN:资源管理系统。
YARN框架
- ResourceManager:处理客户端请求,启动/监控ApplicationMaster,监控NodeManager,资源分配与调度。
- NodeManager:单个节点上的资源管理,处理来自ResourceManager的命令,处理来自ApplicationMaster的命令。
- ApplicationMater:数据切分,为应用程序申请资源,并分配给内部任务,任务监控。
MRv2任务管理
MRv2的运行环境有YARN提供,YARN将MRv1的TaskTrack拆分为resourceManager(主要负责各节点的运行情况合理地分配资源)和 applicationManager(负责单一任务的调度以及向resourceManager请求资源)。如果集群中有多个作业,则需要多个applicationManager,解决负载过重问题。
MRv2任务流程
- 用户向YARN中提交应用程序,其中包括ApplicationMaster程序、启动ApplicationMaster的命令、用户程序等。
- ResourceManager为该应用程序分配第一个Container,并与对应的NodeManager通信,要求它在这个Container中启动应用程序的ApplicationMaster。
- ApplicationMaster首先向ResourceManager注册,这样,用户可以直接通过ResourceManage查看应用程序运行状态,然后,它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤4~7。
- ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源。
- 一旦ApplicationMaster申请到资源后,则与对应的NodeManager通信,要求其启动任务。
- NodeManager为任务设置好运行环境(包括环境变量、jar包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。
- 各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。在应用程序运行过程中,用户可随时通过RPCApplicationMaster查询应用程序的当前运行状态。
- 应用程序运行完成后,ApplicationMaster向ResourceManager注销,并关闭自己。
Yarn调度框架
- 双层调度框架
RM将资源分配给AM,AM将资源进一步分配给各个Task
- 基于资源预留的调度策略
资源不够时,会给Task预留,知道资源充足。
- YARN资源调度器
核心概念:Container——支持COU和内存两种资源调度方式,允许配置每个节点、每个任务可以用的CPU和内存资源总量(代码直接实现)。
提供多种资源调度其:FIFO,Fair Scheduler,Capacity Scheduler……
多租户资源调度器:支持资源按比例分配,支持层级队列划分方式,支持资源抢占。
- YARN资源隔离方案
支持内存和CPU两种资源隔离:内存是“关键!”的资源,CPU是“影响速度”的资源。
内存隔离:1.基于线程监控的方案。2.基于Cgroups的方案。
CPU隔离:默认不对CPU资源进行隔离,基于Cgroups的方案。
YARN支持的框架