首页 百科知识 源代码分析(三二)

源代码分析(三二)

时间:2024-09-22 百科知识 版权反馈
【摘要】:下面是主要步骤:l从datanodeMap得到对应的DatanodeDescriptor,为nodeS;l从Host2NodesMap中获取DatanodeDescriptor,为nodeN;l如果nodeN!

搞定ClientProtocol,接下来是DatanodeProtocol部分。接口如下:


mhtml:file://I:\技术文章下载\2010-4-23整理到notebook\Hadoop汇总2010-4-22\Hadoop源码分析\Hadoop<a href=源代码分析(三二)%20-%20-%20JavaEye技术网站.mht!http://caibinbupt.javaeye.com/upload/attachment/63001/a5d21acc-8d5b-36fe-ae63-4cc8ca048e2b.jpg">
 

 

publicDatanodeRegistration register(DatanodeRegistration nodeReg

                                       ) throwsIOException

用于DataNode向NameNode登记。输入和输出参数都是DatanodeRegistration,类图如下:


mhtml:file://I:\技术文章下载\2010-4-23整理到notebook\Hadoop汇总2010-4-22\Hadoop源码分析\Hadoop源代码分析(三二)%20-%20-%20JavaEye技术网站.mht!http://caibinbupt.javaeye.com/upload/attachment/63003/2dc31bff-1553-3261-90ba-32ac1e43fa98.jpg
 

 

前面讨论DataNode的时候,我们已经讲过了DataNode的注册过程,我们来看NameNode的过程。下面是主要步骤:

l          检查该DataNode是否能接入到NameNode;

l          准备应答,更新请求的DatanodeID;

l          从datanodeMap(保存了StorageID à DatanodeDescriptor的映射,用于保证DataNode使用的Storage的一致性)得到对应的DatanodeDescriptor,为nodeS;

l          从Host2NodesMap(主机名到DatanodeDescriptor数组的映射)中获取DatanodeDescriptor,为nodeN;

l          如果nodeN!=null同时nodeS!=nodeN(后面的条件表明表明DataNode上使用的Storage发生变化),那么我们需要先在系统中删除nodeN(removeDatanode,下面再讨论),并在Host2NodesMap中删除nodeN;

l          如果nodeS存在,表明前面已经注册过,则:

1.      更新网络拓扑(保存在NetworkTopology),首先在NetworkTopology中删除nodeS,然后跟新nodeS的相关信息,调用resolveNetworkLocation,获得nodeS的位置,并从新加到NetworkTopology里;

2.      更新心跳信息(register也是心跳);

l          如果nodeS不存在,表明这是一个新注册的DataNode,执行

1.      如果注册信息的storageID为空,表明这是一个全新的DataNode,分配storageID;

2.      创建DatanodeDescriptor,调用resolveNetworkLocation,获得位置信息;

3.      调用unprotectedAddDatanode(后面分析)添加节点;

4.      添加节点到NetworkTopology中;

5.      添加到心跳数组中。

上面的过程,我们遗留了两个方法没分析,removeDatanode的流程如下:

l          更新系统的状态,包括capacityTotal,capacityUsed,capacityRemaining和totalLoad;

l          从心跳数组中删除节点,并标记节点isAlive属性为false;

l          从BlocksMap中删除这个节点上的所有block,用了(三零)分析到的removeStoredBlock方法;

l          调用unprotectedAddDatanode;

l          从NetworkTopology中删除节点信息。

unprotectedAddDatanode很简单,它只是更新了Host2NodesMap的信息。


免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈