Hadoop学习十九:Hadoop-hdfs 通讯机制VersionedProtocol工作原理

Hadoop学习十九:Hadoop-hdfs 通信机制VersionedProtocol工作原理

一.RPC

  • 在http://zy19982004.iteye.com/blog/1875969里曾经提到VersionedProtocol v = RPC.getProxy(...);得到一个Java代理类。实际上RPC就是建立在VersionedProtocol的基础上的。

二.VersionedProtocol类图 

Hadoop学习十九:Hadoop-hdfs 通讯机制VersionedProtocol工作原理

Hadoop学习十九:Hadoop-hdfs 通讯机制VersionedProtocol工作原理

三.工作原理

      以Client与NameNode通信为例(本文中,不加特别说明,A与B通信,都指A为请求方,B为接收方),Client想在文件系统里创建一个文件夹,会把这一请求通过RPC发送给NameNode,NameNode收到请求后就为Client创建一个文件夹。从这一功能我们可以抽出VersionedProtocol的工作原理。

  • 把Client可能向NameNode发送的任何请求封装在一个叫ClientProtocol的接口里面,当然create(String src...)就是其中方法之一。
  • RPC Server端NameNode你必须具有能够创建文件夹的功能,也就是你要实现ClientProtocol接口,实现所有的方法
  • 最后Client端要做的就是:ClientProtocol rpcNameNode = (ClientProtocol)RPC.getProxy(ClientProtocol.class, ClientProtocol.versionID...);rpcNameNode .create(String src...)获得代理类并调用create(src)方法。这样,Client的请求就在NameNode上被执行了,如果方法有返回值,NameNode返回返回值即可。

     总结一句话就是:A与B通信,B必须实现A protocol的所有方法

 

四.两两通信

  • 在HDFS里面存在四个角色:Client, DataNode, NameNode, SeconeryNameNode,它们之间的通信方式有:
    • Client----->NameNode,此时NameNode必须实现ClientProtocol。
    • Client----->DataNode,此时DataNode必须实现ClientDatanodeProtocol。
    • DataNode----->DataNode,此时DataNode必须实现InterDatanodeProtocol。
    • DataNode----->NameNode,此时NameNode必须实现DatanodeProtocol。
    • SeconeryNameNode----->NameNode,此时NameNode必须实现NamenodeProtocol。
    • Client----->NameNode请求刷新认证信息,此时NameNode必须实现RefreshAuthorizationPolicyProtocol。
    • Client----->NameNode请求属性用户,此时NameNode必须实现RefreshUserMappingsProtocol。同RefreshAuthorizationPolicyProtocol一样,仅仅把Client与NameNode通信的一两个方法单独出去而已。
  • 所以
    class DataNode implements InterDatanodeProtocol, ClientDatanodeProtocol
    
    class NameNode implements ClientProtocol, DatanodeProtocol,
                                     NamenodeProtocol,
                                     RefreshAuthorizationPolicyProtocol,
                                     RefreshUserMappingsProtocol
     

 

五.扩展性

  •  为什么Hadoop这么设计通信机制,其实我认为这样的通信机制并不好理解。
  • 扩展性
    • 如果我自己开发一个发行版,新增加了一个角色BackUpNameNode, 显然,BackUpNameNode------>NameNode,那NameNode再实现一个BackUpNameNodeProtocol接口足以。
    • 看看Yarn新增加的协议接口Hadoop学习十九:Hadoop-hdfs 通讯机制VersionedProtocol工作原理