Hadoop基础知识---之YARN原理简述

来源:互联网 发布:apache启动不了的原因 编辑:程序博客网 时间:2024/05/22 17:29

YARN原理简述

MapReduce的缺陷

多租户问题

多用户

多编程模型

JobTracker/TaskTracker架构设计缺陷

JobTracker是集中处理点,单点故障

JobTracker任务重,资源过度消耗

资源模型过于简单  --- TaskTracker以MR Task数作为资源,没有考虑CPU和内存

TaskTracker强制把资源分成map task slot和reduce taskslot   ---资源利用率低

YARN的诞生   

YARN的命名

Yet Another Resource Negotiator

根本思想

将JobTracker功能分离:资源管理;任务调度/监控

YARN设计目标

集群共享;可伸缩性;可靠性

实现方式

分层的集群框架

 

 

YARN架构

Resouce Manager

主要功能

负责紧张中所有资料的统一管理和分配

接受各个节点(NodeManager)的资源汇报信息

把资源按照策略分配给各应用(ApplicationMaster)

组成部分

用户交互User Service

NodeManager管理

ApplicationMaster管理

Application管理

安全管理

资源分配

NodeManager

主要功能

管理单个计算节点

与ResourceManager保持通信

监控Container生命周期,管理资源使用。没有map slot和reduce slot概念,扩展更容易。

组成部分

–NodeStatusUpdater

–ContainerManager(核心组件)

–ContainerExecutor

–NodeHealthCheckerService

–Security

–WebServer

ApplicationMaster

ApplicationMaster概念

JobTracker诸多问题,作业控制和资源管理分离,ApplicationMaster承担作业控制功能。

YARN称为资源管理平台,适用于多种计算框架。

--MapReduce,流式计算,迭代式计算

--需要为每个应用开发一个ApplicationMaster组件

--YARN提供MapReduce的ApplicationMaster实现

实现方式

–使用基于事件驱动的异步编程模型,由中央事件调度器统一管理所有事件

–每种组件是一种事件处理器,在中央调度器中注册

ApplicationMaster容错

–在HDFS记录task运行日志

–分配新的节点运行ApplicationMaster

–切换后从HDFS读取日志,恢复运行完成的task

–没有运行完task重新申请资源和运行

Container

Container基本概念和工作流程

Container是YARN中资源的抽象,封装了某节点上一定量的资源(内存,CPU)

由AM向RM申请,由RM中的资源调度器异步分配给AM

Container的运行由AM向资源所在的NM发起

两类Container

–运行AM

•由RM申请和启动,用户提交应用程序时,指定AM所需的资源

–运行各类任务

•由AM向RM申请,并由AM与NM通信以启动

YARN的工作流程

用户将应用程序提交到RM

RM为AM申请资源,与某个NM通信,启动AM

AM与RM通信,为执行任务申请资源

得到资源后与NM通信,启动相应的任务

所有任务结束后,AM向RM注销,整个应用结束

HadoopRPC的演变

Hadoop RPC在跨语言支持和协议兼容性两个方面存在不足

Hadoop RPC应允许某些协议的客户端或者服务器端采用其它语言实现

当前Hadoop版本较多,而不同版本之间不能通信

为了解决以上几个问题,Hadoop YARN将RPC中的序列化部分剥离开,以便将现有的开源RPC框架集成进来

–RPC类变成了一个工厂,它将具体的RPC实现授权给RpcEngine实现类,而现有的开源RPC只要实现RpcEngine接口,便可以集成到HadoopRPC中

YARN中的RPC协议

Yarn中的事件驱动与状态机

为了增大并发性,Yarn采用事件驱动的并发模型,将各种处理逻辑抽象成事件和调度器,将事件的处理过程用状态机表示

什么是状态机

---如果一个对象,其构成为若干个状态,以及触发这些状态发送相互转移的事件,那么此对象称之为状态机。

对于状态机模式,基本做法是

根据发生的时间和当前状态,来执行下一步的动作action,并设置下一个状态。

ResourceScheduler

事件处理器,处理6种事件类型:

–NODE_REMOVED,移除计算节点

–NODE_ADDED,增加计算节点

–APPLICATION_ADDED,RM收到新App

–APPLICATION_REMOVED,App运行结束

–CONTAINER_EXPIRED,一个AM在一定时间间隔内没有使用Container,会被scheduler收回

–NODE_UPDATE

•NM通过心跳向RM汇报Container情况,触发NODE_UPDATE事件,会引发资源分配

•调度器:FIFOScheduler、CapacityScheduler、FairScheduler

 

FIFO Scheduler

•最简单的调度器

•只有一个队列

•先入先出

CapacityScheduler

最大化集群吞吐量

核心思想

--- 每个队列获得一定资源  

---空闲队列可以把资源“借”给忙队列

---需要时可以取回

调度策略

应该获得的资源/实际获得的资源,选择比值最低的队列

队列内FIFO

考虑限制:用户最大资源限制,任务资源要求

资源分配模型

调度器维护多个队列信息

用户向队列提交应用

NM心跳时,调度器根据规则选择队列和应用

本地优化与延迟调度

本地优化

HDFS具有3副本,在多个节点

Container处理的数据在本地可以节省网络带宽

AM给RM提交资源申请时,发送本地申请  ---本地申请,匹配机架申请,任意申请

延迟调度

本地申请匹配失败,暂时跳过

跳过次数有限,防止“饿死”   

 

FairScheduler

 

 

•多用户公平共享集群资源

•作业池

–每个用户单独资源池

–作业放进共享资源池

–每个作业最低资源保障

•调度策略

–默认FIFO

–赤字策略

•deficti=理想情况下获得的资源-实际获得资源的差值

•优先分给最高deficit作业

 

YARN HA架构 

YARN总结

改进部分

减少MapReduce的资源瓶颈,让监控task状态的程序分布式化,更安全,更优美。

ApplicationMaster是可变更部分,可以针对不同的编程模型编写自己的ApplicationMaster,

 

让更多编程模型能够跑在Hadoop

–对资源的表示以内存和CPU为单位,比之前的slot数目更合理

–MRv1框架jobtracker监控job下的所有task,现在交给ApplicationMaster。ResourceManager监控所有ApplicationMaster ,如果出了问题在其他机器重启

–Container是Yarn作为资源隔离提出的框架,提供java虚拟机内存的隔离

 

 

 

 

 

 

 

 

 

0 0
原创粉丝点击