Hadoop 2.0 Yarn代码:NodeManager端代码分析_NM端各服务模块的启动

11 篇文章 0 订阅

1.概览

以下介绍的NodeManager是如何启动和注册各个服务的

主要涉及的Java文件

hadoop-yarn-server-nodemanager下的包org.apache.hadoop.yarn.server.nodemanager

        NodeManager.java

 

2.代码分析

以下均在NodeManager.java中,NodeManager:当Hadoop启动时,NodeManager中的main函数被调用

 

1).main函数

  • 输出信息到log日志中,创建NodeMananger对象,
  • 调用initAndStartNodeManager(false)

 

2).initAndStartNodeManager函数

  • initAndStartNodeManager()函数被调用后,首先主要读取YarnConfiguration配置信息
  • 调用init()函数,进行初始化工作 见3)
  • 调用start()函数,主要操作是启动各个Service  见4)

 

3).init函数

  • 进行基本的配置操作,例如从配置文件读入参数等
  • 创建并添加DeletionService、NodeHealthCheckerService到父类的一个ArrayList<Service>对象serviceList
  • 调用createNodeStatusUpdater()函数创建NodeStatusUpdater对象,再调用NodeManager的父类方法register将这个对象注册添加父类的ArrayList<Service>对象listeners中.
  • 调用createContainerManager()、createWebServer()函数和createNodeResourceMonitor函数创建ContainerManagerImpl对象、Service对象和NodeResourceMonitor对象,并将其添加到serviceList
  • ContainerManagerImpl注册到之前创建好的异步事件调度器AsyncDispatcher中,然后将将AsyncDispatcher调度器添加到服务队列serviceList中
  • 最后添加NodeStatusUpdater对象到serviceList中,最后添加这个对象的原因是要在心跳操作启动必须在所有其他服务之后。
  • 调用父类的init()函数,进行其他的配置初始化。

 

4)start函数

  • 进行安全认证操作
  • 调用父类的start()函数依次启动在3)中所有添加好的服务。其中AsyncDispatcher负责事件的传送,NodeStatusUpdater负责产生心跳事件,ContainerManagerImpl负责提供Hadoop RPC需要的函数等等

 

 下图给出整体关系,其中给出NodeStatusUpdater、AsyncDispatcherContainerManagerImpl三者的关系,以后代码分析很多地方将涉及到这三个类。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值