一个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的序列化 采用 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(资源调度器)
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的描述信息:
资源量和container数目,有什么区别?
资源量的单位是ResorceProto,里面有memory 和 cpu 的量。
Capacity Scheduler and Fair Scheduler
Fair Scheduler的资源抢占是 先等待再强制回收
基于任务数目的负载均衡机制
允许每个队列单独设置调度策略(FIFO,Fair和DRF)
不支持抢占机制后,会将自己的资源分配给其他队列吗?
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当前运行状态
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 task和reduce task分为四种状态:
pending:刚启动但尚未向ResourceManager发送资源请求
scheduled:已经向ResourceManager发送资源请求,但尚未分配到资源
assigned:已经分配到了资源且正在运行
completed:已经运行完成
ChainMapper:链式处理,前Map的输出作为后Map的输入,最后作为MapperTask输出
ChainReduce:链式处理,一个Reduce后可以接多个Mapper,最后作为reduceTask输出