YARN简述及优势

MRv1缺点

1、JobTracker容易存在单点故障

2、JobTracker负担重,既要负责资源管理,又要进行作业调度;当需处理太多任务时,会造成过多的资源消耗。

3、当mapreduce job非常多的时候,会造成很大的内存开销,在
TaskTracker端,以mapreduce task的数目作为资源的表示过于简单,没有考虑到cpu以及内存的占用情况,如果两个大内存消耗的task被调度到了一块,很容易出现OutOfMemory异常。

4、在TaskTracker端,把资源强制划分为map task slotreduce task slot,如果当系统中只有map task或者只有reduce task的时候,会造成资源的浪费。

YARN架构

YARN简述及优势_第1张图片

基本组件

1、ResourceManager:
包含两个组件,一个是调度器(Scheduler),另一个是应用管理器(ASM)。RM是一个中心的服务,它做的事情是调度、启动每一个Job所属的ApplicationMaster、另外,监控ApplicationMaster的存在情况。

2、NodeManager:
是每个节点上的框架代理,主要负责启动应用所需的容器,监控资源(内存,CPU,磁盘,网络等)的使用情况并将之汇报给调度器。

3、ApplicaionManager:
主要负责接收作业,协商获取第一个容器用于执行ApplicationMaster和提供重启失败AM container的服务。

4、ApplicationMaster:
负责一个Job生命周期内的所有工作,类似老的框架中Job Tracker。但注意每一个Job(不是每一种)都有一个Application Master,它可以运行在ResourceManager以外的机器上。

YARN运行过程剖析

YARN简述及优势_第2张图片
1、Clien提交作业到ResourceManager,通常要指定应用程序ApplicationMaster是什么,ApplicationMaster的启动命令是什么,需要多少CPU、内存,外部资源等

2、ResourceManager根据需求,通过内部的一个调度器,为应用程序的ApplicationMaster寻找对应的资源,找到在某个NodeManager之后,
告诉这个NodeManager要启动这个ApplicationMaster的命令是什么,需要多少内存CPU等等。

3、NodeManager收到这个命令之后,启动这个ApplicaionMaster。

4、应用程序ApplicaionMaster启动之后,如果是MapReduce的ApplicaionMaster的话,那ApplicaionMaster作用就是将作业提交数据切分成一个个的Map和一个个的reduce,之后汇总各个map和reduce的资源总的需求,然后与ResourceManager进行通信,例如,申请10个CPU、10G内存。
ResourceManager会根据当前各个节点的资源使用情况,给ApplicaionMaster分配资源。(并不是一下子分配给他,而是一个动态的分配过程。)

5、如果当前有一个CPU和1G内存空闲,那么先分配给他,分配之后,ApplicaionMaster与对应的NodeManager通信告诉他,启动某个task(这个task的启动命令是什么,环境变量是什么),

6、NodeManager收到指令之后,根据这个描述(这个task的启动命令是什么,环境变量是什么),NodeManager启动task,被封装到Container一个独立的运行环境中,之后Task就运行起来了。

RM结构

YARN简述及优势_第3张图片

1、用户交互

ClientService
是为普通用户提供的服务,它会处理来自客户端各种RPC请求,比如提交应用程序、终止应用程序,获取应用程序运行状态等

AdminService
YARN为管理员提供了一套独立的服务接口,以防止大量的普通用户请求使管理员发送的管理命令饿死,管理员可通过这些接口管理集群,比如动态更新节点列表,更新ACL列表,更新队列信息等。

2、NM管理

NMLivelinessMonitor
监控NM是否活着,如果一个NodeManager在一定时间(默认10min)内未汇报心跳信息,则认为它死掉了,会将其从集群中移除。

NodesListManager
维护正常节点和异常节点列表,管理exlude(类似于黑名单)和inlude(类似于白名单)节点列表,这两个列表均是在配置文件中设置的,可以动态加载。

ResourceTrackerService
处理来自NodeManager的请求,主要包括两种请求:注册和心跳。
其中,注册是NodeManager启动时发生的行为,请求包中包含节点ID,可用的资源上限等信息,
而心跳是周期性行为,包含各个Container运行状态,运行的Application列表、节点健康状况(可通过一个脚本设置),而ResourceTrackerService则为NM返回待释放的Container列表、Application列表等。

3、AM管理

AMLivelinessMonitor
监控AM是否活着,如果一个ApplicationMaster在一定时间(默认为10min)内未汇报心跳信息,则认为它死掉了,它上面所有正在运行的Container将被认为死亡,AM本身会被重新分配到另外一个节点上(用户可指定每个ApplicationMaster的尝试次数,默认是1次)执行。

ApplicationMasterLauncher
与NodeManager通信,要求它为某个应用程序启动ApplicationMaster

ApplicationMasterService
处理来自ApplicationMaster的请求,主要包括两种请求:注册和心跳。
其中,注册是ApplicationMaster启动时发生的行为,包括请求包中包含的所在节点,RPC端口号和tracking URL等信息;
而心跳是周期性行为,包含请求资源的类型描述、待释放的Container列表等,而AMS则为之返回新分配的Container、失败的Container等信息。

4、Application管理
ApplicationACLsManager
管理应用程序访问权限,包含两部分权限:查看和修改,查看主要指查看应用程序荃本信息,而修改则主要是修改应用程序优先级、杀死应用程序等。

RMAppManager
管理应用程序的启动和关闭。

ContainerAllocationExpirer
YARN**不允许AM获得Container后长时间不对其使用,因为这会降低整个集群的利用率。**当AM收到RM新分配的一个Container后,必须在一定的时间(默认为10min)内在对应的NM上启动该Container,否则,RM会回收该Container。

NM结构

YARN简述及优势_第4张图片

YARN优势

1、YARN的设计减小了JobTracker的资源消耗,并且让监测每一个Job子任务(tasks)状态的程序分布式化了,更安全、更优美。

2、在新的Yarn中,ApplicationMaster是一个可变更的部分,用户可以对不同的编程模型写自己的AppMst,让更多类型的编程模型能够跑在Hadoop集群中。

3、对于资源的表示以内存为单位,比之前以剩余slot数目更加合理。

4、MRv1中JobTracker一个很大的负担就是监控job下的tasks的运行状况,现在这个部分就扔给ApplicationMaster做了,
而ResourceManager中有一个模块叫做ApplicationManager,它是监测ApplicationMaster的运行状况,如果出问题,会在其他机器上重启。

5、Container用来作为YARN的一个资源隔离组件,可以用来对资源进行调度和控制。

新旧Hadoop脚本/变量的位置变化

YARN简述及优势_第5张图片

新旧Hadoop框架配置文件变化

YARN简述及优势_第6张图片
YARN简述及优势_第7张图片

你可能感兴趣的:(Hadoop,玩转Hadoop)