Hadoop心跳机制源码分析(2)

需要注意的是:发送心跳的对象并不是datanode,而是一个名为namenode的对象,难道在datanode端就直接有个namenode的引用吗?其实不然,我们来看看这个namenode吧:

代码二:

public DatanodeProtocol namenode = null;  

namenode其实是一个DatanodeProtocol的引用,在对hadoop RPC机制分析的文章中我提到过,这是一个Datanode和Namenode通信的协议,其中有许多未实现的接口方法,sendHeartbeat()就是其中的一个。下面看看这个namenode对象是怎么被实例化的吧:

代码三:

this.namenode = (DatanodeProtocol)         RPC.waitForProxy(DatanodeProtocol.class,                         DatanodeProtocol.versionID,                         nameNodeAddr,                          conf);  

其实这个namenode并不是Namenode的一个对象,而只是一个Datanode端对Namenode的代理对象,正是这个代理完成了“心跳”。代理的底层实现就是RPC机制了。参考:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/6f1b8624d1b1664f3ef6d53c806d99fd.html