YARN

一个YARN 对应 多个ApplicationMaster

一个 ApplicationMaster 对应一个应用程序

ResourceManager:

调度器(Scheduler) :根据容量,队列 分配资源  资源容器(container 内存,CPU,磁盘,网络)

应用程序管理器(Applications Manager , ASM):管理所有应用程序的提交,启动,运行状态

ApplicationMaster (AM)     

进程间通信(Inter-Process Communication,     IPC)

远程过程调用(Remote Procedure Call,     RPC)   客户机/服务器 模型

 

AM与NM     ContainerManagementProtocol

AM与RM            ApplicationMasterProtocol

Admin与RM  ResourceManagerAdministrationProtocol

NM与RM  ResourcetrackerProtocol

JobClient 与 RM  ApplicationClientProtocol

 

 

JobClient与MRAppMaster

 

 

ResourceTracker(Protocol) 资源追踪器    NM与RM  连接,汇报   ResourceTrackerService

JobClient与RM    ApplicationClientProtocol      ClientRMService

AM与RM            ApplicationMasterProtocol       ApplicationMasterService

YARN_第1张图片

 

Yarn的序列化 采用 Google 开源的序列化库 Protocol Buffers

Service ---- >  AbstractService   /   CompositeService

Event      EventHandler

 

Job:作业   Task:任务         一个Job有多个Task

 

RecourceManager内部架构:

       用户交互模块:

              ClientRMService(为用户提供的服务接口)

AdminService(为管理员提供的服务接口)

WebApp(Web界面)

       NM管理模块:

              NMLivelinessMonitor  监控NM是否活着

              NodesListManager  维护正常节点和异常节点列表

              ResourceTrackerService  处理NM的请求(注册和心跳),RM返回待释放内容

AM管理模块:

ApplicationMasterLauncher  要求NM启动AM ,并向 AMLivelinessMonitor注册

AMLivelinessMonitor  监控AM是否活着,死亡后重试

              ApplicationMasterService(AMS)  处理AM的请求,返回AM的Container信息

       Application管理模块:

              ApplicationACLsManager  管理应用程序的访问权限(查看权限和修改权限)

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

              ContainerAllocationExpirer  判断是否回收Container  并执行回收Container

       状态机管理模块:

RMApp  维护一个Application的生命周期 (一个Application可能启动多个Application Attempt (失败重试)  算是同一个Application)

              RMAppAttempt  维护一个ApplicationAttempt的生命周期

              RMContainer  维护一个Container的生命周期

              RMNode  维护一个NM的生命周期

       安全管理模块:权限管理机制  由ClientToAMSecretManager,

              ContainerTokenSecretManager 和 ApplicationTokenSecretManager等模块完成

       资源分配模块:

              ResourceScheduler(资源调度器)

YARN_第2张图片

 

NM  发送 Container 信息 --->  RM   返回待抢占的Container  --->  AM

AM  发送待释放Container信息 --->  RM  返回待释放Container列表 --->  NM

 

 

资源调度器

       HOD调度器

       yarn自带FIFO,Capacity Scheduler,Fair Scheduler三种资源调度器

       yarn具有双层资源调度模型:

              RM ---  多AM   ,    AM  ---  多Task

              pull-based(拉式)通信模型

       资源分配算法:

              最大最小公平(max-min fairness)算法 ,主资源公平调度算法(DRF)

              最小资源量

minimum-user-limit-percent:最低资源保障百分比

Application请求container的描述信息:
              YARN_第3张图片                资源量和container数目,有什么区别?

资源量的单位是ResorceProto,里面有memory 和 cpu 的量。

Capacity Scheduler  and  Fair Scheduler

Fair Scheduler的资源抢占是 先等待再强制回收

                     基于任务数目的负载均衡机制

                     允许每个队列单独设置调度策略(FIFO,Fair和DRF)

              不支持抢占机制后,会将自己的资源分配给其他队列吗?

             

              YARN_第4张图片

 

 

NodeManager剖析

       ResourceTrackerProtocol协议

              NodeManager向ResourceManager进行pull通信

              registerNodeManager函数:

注册信息RegisterNodeManagerRequest (httpPort,nodeId,totalResource)

       httpPort:该NodeManager对外提供的HTTP端口号

       nodeId:该NodeManager所在的host和对外的RPC端口号

       totalResource:该NodeManager所在节点总的可分配资源

返回信息RegisterBodeManagerResponse

       MasterKey:新生成的Container Token和Node Token的Master Key.

NodeAction: RM向NM返回的下一步操作,包括NORMAL(正常,注册成功),RESYNC(重新同步资源),SHUNTDOWN(停止运行)

rmIdentifier:RM的标示符,可据此判断是原RM还是新启动的RM

diagnosticsMessage:注册失败时,告知具体的失败原因

              nodeHeartbeat函数:

                     定期向RM汇报Container运行情况并领取命令

       ContainerManagementProtocol协议

              ApplicationMaster向NodeManager进行push通信

              startContainer函数:

                     AM要求NM启动一个Container,有一个StartContainerRequest参数

StartContainerRequest封装了Container启动时所需的本地资源,环境变量,执行命令,Token等信息,返回StartContainerResponse信息

              stopContainer函数:停止一个Container

                     StopContainerRequest参数,用于指定待杀死的ContainerID.

                     StopContainerResponse

              getContainerStatus函数:

                     GetContainerStatusRequest参数,封装了目标Container的ID

                     返回GetContainerResponse参数,封装了Container当前运行状态

       YARN_第5张图片

       NodeStatusUpdater:该组件负责向RM注册并汇报可用资源,定期汇报各Container的状态更新,同时RM会返回待清理Container列表,待清理应用程序列表等信息。

       ContainerManager:NM核心组件之一,其下各组件共同管理该节点所有的Container

PRC Server:AM与NM通信时,NM的Server,接受Container操作,但是任何的Container操作均需经ContainerTokenSecretManager合法性验证,防止AM伪造。

              ResourceLocalizationService:负责Container所需资源的本地化,从HDFS下载资源。

              ContainersLauncher:维护一个线程池以并行完成Container相关操作(启动,杀死)

              AuxServices:附属服务,每个节点可以定制一些特定框架需要的服务。

              ContainersMonitor:监控Container的资源使用量。

              LogHandler:控制Container日志的保存方式。

              ContainerEventDispatcher:Container事件调度器,将ContainerEvent类型 的事件调度给对应的Container的状态机ContainerImpl。

ApplicationEventDispatcher:Application事件调度器,将ApplicationEvent类型 的事件调度给对应的Application的状态机ApplicationImpl。

ContainerExecutor:与底层操作系统交互,安全存放Container需要的文件和目录,以

一种安全的方式启动和清除Container对应的进程.(NM启动者 或 应用程序启动者 身份)。

       NodeHealthCheckerService:周期运行脚本和向磁盘写文件 检查节点的健康状况,RM发现Node不健康就会将它加入黑名单,加入黑名单后,运行的Container仍正常运行。

       疑问--》 运行的Container怎么通知RM,其运行完成呢?

       DeletionService:删除文件服务

       Security:安全模块

              ApplicationACLsManager:确保访问NM的用户是合法的。

              ContainerTokenSecretManager:确保用户请求的资源被RM授权过。

       WebServer:通过Web界面向用户展示所用应用程序运行状态,Container列表,节点健康状况和Container产生的日志等信息。

       健康状况检测机制,检测磁盘损坏数目

       PUBLIC(节点所有用户),PRIVATE(同一用户的所有应用程序) ,APPLICATION(同一应用程序的所有container)

       ARCHIVE归档文件自动解压缩,.jar文件还可以自动加到CLASSPATH中

       FILE文件

       PATTERN 两种类型的混合体,可通过正则制定哪些为ARCHIVE文件

 

 

Decommision操作:

       添加exclude文件,输入refreshNode命令

 

作业的map taskreduce task分为四种状态:

pending刚启动但尚未向ResourceManager发送资源请求
scheduled已经向ResourceManager发送资源请求,但尚未分配到资源
assigned已经分配到了资源且正在运行
completed已经运行完成

 

ChainMapper:链式处理,前Map的输出作为后Map的输入,最后作为MapperTask输出

ChainReduce:链式处理,一个Reduce后可以接多个Mapper,最后作为reduceTask输出

你可能感兴趣的:(YARN)