Hadoop on Yarn 各组件详细原理

  运行在独立的节点上的ResourceManager和NodeManager一块儿组成了yarn的核心,构建了整个平台。ApplicationMaster和相应的container一块儿组成了一个Yarn的应用系统。web

  ResourceManager提供应用程序的调度,每一个应用程序由一个ApplicationMaster管理,以Container的形式请求每一个任务的计算资源。Container由ResourceMangaer调度,由每一个节点的NodeManager上进行本地的管理。shell

ResourceManager 组件缓存

  弄了一个大大的ResourceManager,醒目吧哈哈- -,扯淡到此为止,ResourceManager是Master,仲裁集群全部的可用资源,从而帮助管理运行在Yarn平台上的分布式应用程序。与其余组建的协做包括:接收ApplicationMaster的资源请求,每一个节点的NodeManager从ResourceManager中获取指令,管理单个节点上的可用资源。(ApplicationMaster的职责就是向ResourceManager申请资源而且和NodeManager一块儿工做、启动、监控和中止Container。安全

1、客户端和ResourceManager交互异步

  这里细说Client端的话,ResourceManager主要是经过Client Service、Admininistration Service、Application ACL Manager ResourceManager Web Application及Web Service组件与客户端交互。分布式

  一、Client Service  spa

  这个服务实现了基本的客户端ResourceManager的接口ApplicationClientProtocol.该组件处理全部来自客户端到ResourceManager的远程过程调用(RPC)通讯。包括:应用程序提交、应用程序终止、获取应用程序,队列,集群统计,用户ACL及更多信息。在安全模式下,Client Service确保所来自用户的请求都已经认证过(好比经过Kerberos),对于不能直接经过Kerberos认证的客户端,ClientRMService也提供了API,包括ResourceManager代理令牌,代理令牌是Kerberos认证客户端的一种特殊对象,可以第一次安全的与ResourceManager通讯并传递给它本身额非认证的进程。线程

  二、Administration Service代理

  既然Client Service是负责处理通常用户应用程序的提交或终止,为了确保管理员的请求不会被通常用户的请求饿死,提供了搞优先级的操做命令,这里就多分离出了一个接口供管理员使用。经过ResourceManagerAdministrationProtocol来实现的通讯协议。包含的主要操做有:刷新队列从新分配队列或改变队列的属性刷新ResourceManager处理的节点列表,例如:增长新安装的节点或退役现有节点等。日志

  三、Application ACL Manager

  相似客户端和管理员等的请求这样面向用户的API,ResourceManager能够经过设置配置属性yarn.acl.enable为true来启动应用程序的ACL。查看访问的ACL决定谁能够经过RPC接口查看一些货全部应用程序的相关细节,WEB UI服务及WEB服务,修改的ACL决定着哪些用户能够"修改"应用程序(杀死程序等)

  当相同的ACL信息传递给ApplicationMaster,这样ApplicationMaster可使用该信息让用户访问ApplicationMaster内部运行的一些服务,做为ContainerLaunchContext的一部分,当拉起一个容器时NodeManager也接收相同的ACL信息,而后使用它们控制针对应用程序/container的请求,主要包括它们的状态、应用日志等。

  四、ResourceManager Web Application 和 Web Service

  这个就是ResourceManager的一个web应用程序来输出集群的状态信息、指标、节点活跃列表等,指向ApplicationMaster Web接口的超连接及一个调度的专用接口。(就是咱们在集群配置中加入的web.address)

2、应用程序与ResourceManager的通讯

  一旦应用程序经过ResourceManager中的面向客户端的服务,它就会穿过ResourceManager的内部,负责拉起ApplicationMaster的状态机。主要包括如下几个通讯方面:

  一、ApplicationMaster Service

  该组件相应全部来自ApplicationMaster的请求,实现了ApplicationMasterProtocol协议,这是ApplicationMaster与ResourceManager通讯的惟一协议。主要包括如下任务:注册新的ApplicationMaster来自任意正在结束的ApplicationMaster的终止/取消注册请求认证来自不一样ApplicaitonMaster的全部请求确保合法的ApplicationMaster发送的请求传递给ResourceManager中的应用程序对象、获取来自全部运行ApplicationMaster的Container的分配和释放请求、异步的转发给Yarn调度器.

  ApplicaitonMaster Service确保了任意时间点、任意ApplicaitionMaster只有一个线程能够发送请求给ResourceManager,由于在ResourceManager上全部来自ApplicaitonMaster的RPC请求都串行化了。

  二、ApplicationMaster 存活监控

  这个监控器跟踪每一个ApplicationMaster以及它的最后的心跳时间。可在配置文件中配置时间,在配置时间内没有产生心跳的ApplicationMaster会被标记为死亡,ResourceManager会从新调度这个应用程序,在一个新的container上运行一个新的ApplicaitonMaster实例,默认状况下,最多容许两次这样的尝试。

3、节点和ResourceManager 通讯

  下列是ResourceManager的组件和运行在集群节点上的NodeManager进行通讯。

  一、ResourceManager Tracker Service

  NodeManager发送心跳给ResourceManager,ResourceManager的该组件负责相应来自全部节点的RPC。实现了ResourceTracker接口与全部NodeManager的通讯。主要负责:注册新节点接收前面注册节点的心跳确保合法的节点能够和ResourceManager通讯。Reource Tracker Service转发一个合法的心跳给YARN调度器,YARN调度器随后根据节点的空闲资源及不一样应用程序的资源请求作调度决定。

  二、NodeManagers 存活监控

  为跟踪活跃的节点和肯定已死的节点,该组件跟踪每个节点的标识符(ID)和它最后的心跳时间。

  三、Nodes-List Manager

  是在ResourceManager内存中的一个集合,包括有效节点和被排除的节点。它也跟踪由管理员明确退役的节点。

 

 

ApplicationMaster 组件

  ApplicationMaster负责管理已提交的应用程序的集合。在应用程序提交后,首先检查其合法性,而后,肯定没有其余已提交的应用程序已经使用相同的ID.该组件还负责记录和管理已结束的应用程序,过段时间才会从ResourceManager的内存中清除。

1、ApplicationMaster Launcher

  在Yarn中,每个其余类型的Container的拉起都是由ApplicationMaster发起的,ApplicationMaster自己的Container是由ResourceManager申请,并在NodeManager上准备和拉起的。该组件维护一个线程池来设置环境,且和NodeManager通讯来拉起新提交应用程序的ApplicationMaster,或者由于某些缘由失败的先前应用程序实例所失败的ApplicationMaster。它也在以应用程序正常结束或者要强行终止时,负责告诉NodeManager来清理ApplicaitonMaster。(杀掉相应进程)

2、YarnScheduler

  Yarn调度器负责给正在运行的应用程序分配资源,这些应用程序受到容量、队列等各方面的限制。

3、ContainerAllocationExpirer

  该组件负责确保全部分配的Container最终被ApplicationMaster使用,并在相应的NodeManager上拉起。

 

 

NodeManager 组件

  NodeManager接受来自ApplicationMaster的启动或中止Container的请求,管理Container是NodeManager的核心功能。在真正拉起一个Container以前,NodeManager会将全部须要的库文件下载到本地,包括数据文件,可执行文件、tarball、JAR文件,shell脚本等待。这样下载好的库文件能够经过本地应用级别缓存被同一应用的多个Container共享

  NodeManager内部也能够划分为一些列嵌套组件,卧槽好多啊。。。

1、NodeStatusUpdater

   在NodeManager刚启动时,NodeStatusUpdater组件会向ResourceManager注册,发送本节点的可用资源,以及NodeManager的Web server和RPC Server的监听端口。ResourceManager在注册过程当中,向NodeManager发出安全相关的key,NodeManager将用这个KEY做为ApplicationMaster的Container请求作认证。

、ContainerManager

  是NodeManager的核心管理组件。其中也包含许多子组件:RPC Server资源本地化服务PUBLIC资源的本地化等等。

具体组件就不一一列举了。。。。太多了。。。。。。。

 

整个做业大致整体运行流程:

一、应用程序提交给ResourceManager。

二、ApplicationMaster启动,并向ResourceManager注册。

三、ApplicationMaster向ResourceManager请求Container执行实际的工做。

四、ApplicationMaster将从ResourceManager分配的Container信息(包括各类资源配置啊等信息)传递给NodeManager启动。

五、随之,计算过程在Container中进行,这些Container将与ApplicationMaster保持通讯,发送心跳等告知任务过程。

六、当应用程序完成后,Container被中止,ApplicationMaster从ResourceManager中注销。

相关文章
相关标签/搜索