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

一.RPC

二.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
     

五.扩展性

扫描二维码关注公众号,回复: 604803 查看本文章
  •  为什么Hadoop这么设计通信机制,其实我认为这样的通信机制并不好理解。
  • 扩展性
    • 如果我自己开发一个发行版,新增加了一个角色BackUpNameNode, 显然,BackUpNameNode------>NameNode,那NameNode再实现一个BackUpNameNodeProtocol接口足以。
    • 看看Yarn新增加的协议接口 
一.RPC 二.VersionedProtocol类图  三.工作原理 四.两两通信 五.扩展性

猜你喜欢

转载自zy19982004.iteye.com/blog/1887407
今日推荐