加入收藏 | 设为首页 | 会员中心 | 我要投稿 | RSS
您当前的位置:首页 > 教程文章 > NOSQL数据库

Hadoop源代码分析(32)

时间:2012-04-27 00:28:06  来源:  作者:

 

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


public DatanodeRegistration register(DatanodeRegistration nodeReg
) throws IOException
用于DataNode向NameNode登记。输入和输出参数都是DatanodeRegistration,类图如下:


前面讨论DataNode的时候,我们已经讲过了DataNode的注册过程,我们来看NameNode的过程。下面是主要步骤:
l检查该DataNode是否能接入到NameNode;
l准备应答,更新请求的DatanodeID;
ldatanodeMap(保存了StorageID à DatanodeDescriptor的映射,用于保证DataNode使用的Storage的一致性)得到对应的DatanodeDescriptor,为nodeS;
lHost2NodesMap(主机名到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;
lBlocksMap中删除这个节点上的所有block,用了(三零)分析到的removeStoredBlock方法;
l调用unprotectedAddDatanode;
lNetworkTopology中删除节点信息。
unprotectedAddDatanode很简单,它只是更新了Host2NodesMap的信息。
来顶一下
返回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
推荐资讯
在CentOS下搭建Android 开发环境
在CentOS下搭建Androi
轻松搭建属于自己的Ubuntu发行版
轻松搭建属于自己的Ub
利用SUSE Studio 打造自己的个性化Linux发行版
利用SUSE Studio 打造
那些采用PHP技术的IT大企业
那些采用PHP技术的IT大
相关文章
    无相关信息
栏目更新
栏目热门