首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 服务器 > 云计算 >

hdfs集群起步——NameNode任务线程之DecommissionManager$Monitor(3)

2013-10-22 
hdfs集群启动——NameNode任务线程之DecommissionManager$Monitor(3)(转)我们知道,在NameNode节点启动的时候

hdfs集群启动——NameNode任务线程之DecommissionManager$Monitor(3)

(转)      

我们知道,在NameNode节点启动的时候,会启动一些后台的任务线程,例如:

hdfs集群起步——NameNode任务线程之DecommissionManager$Monitor(3)

关于这些个后台监控线程有神马具体的用途,我在这里不会一一作出解释,但我会在以后的博文中来具体阐述,因为他们基本上担负起了整个NameNode节点的管理工作。在本文,我将具体的讲述DecommissionManager$Monitor这个后台工作线程。

    先来看看DecommissionManager$Monitor是用来干神马的吧!DecommissionManager主要是负责管理节点退役或者说节点停用(注意:这里的节点指的是DataNode节点),因为我们不能说让一个DataNode节点退役,就能马上让它退役的,而是要等到该DataNode节点上的所有数据块Blocks被复制完成之后,才能允许该DataNode节点退役。这就需要Monitor负责定时地检测这些节点中Blocks的状态,当这些Blocks都满足副本因子之后,才能将该DataNode节点置为退役状态,因此我们可以看出,在DecommissionManager里其实也只有Monitor在真正执行功能。下面就来看看Monitor的检测实现吧!

     关于影响Monitor检测性能的参数:

  • AdminStates.DECOMMISSION_INPROGRESS;  AdminStates.DECOMMISSIONED;  

        前一个变量表示DataNode节点处于退役处理状态、后一个变量表示节点处于已退役状态。当然,在正常的情况下,DataNode节点一般由AdminStates.DECOMMISSION_INPROGRESS变为AdminStates.DECOMMISSIONED状态,那么这又是由谁触发的呢?

    1. Include/Exclude Host列表的刷新重载

        NameNode为客户端提供了一个方法refreshNodes(),当客户端调用该接口的时候,NameNode节点会重新加载配置文件中的dfs.hosts和dfs.hosts.exclude两个选项,更新HostsFileReader,之后根据HostsFileReader的新主机列表来判断哪些DataNode节点被允许连接到NameNode,哪些不允许被连接,对于不允许连接的DataNode节点,先将其标记为AdminStates.DECOMMISSION_INPROGRESS,之后就开始对该DataNode节点上的数据块Blocks进行复制,使之满足副本因子(Blocks复制是由其它工作线程监督完成的,而只需要将需要replication的Blocks放到一个按优先级的队列中即可),那么接下来就是DecommissionManager$Monitor线程要干的事情了。

    2. 数据节点注册

           当数据节点重启或者重新初始化之后,都会首先向NameNode节点注册,如果此时主节点不允许该数据节点加入集群,那么它就会对该数据节点进行强制退役处理。

        当DecommissionManager$Monitor线程把一个DataNode节点标记为AdminStates.DECOMMISSIONED状态之后,NameNode节点会在当该DataNode节点下一次发送heart的时候,就明确的给他一个command,让它shutdown。

  • 热点排行