HDFS通信协议

来源:互联网 发布:sql中单引号双引号 编辑:程序博客网 时间:2024/05/22 07:04
HDFS通信协议

HDFS通信协议抽象了HDFS各个节点之间的调用接口。
   1. Hadoop RPC接口:hadoop RPC调用是的HDFS进程能够像本地调用一样调用另一个进程中的方法(远程过程调用协议)。
      1.1 ClientProtocol:定义了客户端端Namenode节点之间的接口,客户端对文件系统的所有操作都要通过这个接口。
            1.ClientProtocol定义了所有由客户端发起,有Namenode响应的操作。这个接口有很多类:HDFS文件读,文件写及追加写的操作,管理操作等。
             文件读写及追加写的操作都可以在FileSystem类中找到方法。客户端读文件方法:getBlockLocations()和reportBadProtocol。
            getBlockLocations作用:用于获取数据块的文件名和位置信息。reportBadProtocol作用:汇报错误的数据块信息。
            2.写/追加写的方法:creat()创建一个新的空文件,append()打开已有的文件,addBlock()向指定文件添加一个新的数据块,当客户端完成写的操作后,调用            complete()方法通知Namenode(true,1),返回值文true,默认副本为1,namenode文件状态转为正常,提交新写入HDFS文件的所有数据块。
            3.当操作写文件操作时出现异常,abandonBlock()方法放弃一个新的申请的数据块。然后再调用addBlock()方法获取新的数据块,并将无法连接的数据节点放入            excludeNode参数列表中,防止namenode将数据块副本分配到这个节点上,造成再次无法连接情况。
            4.快照:用户通过hdfs dfs 创建快照(creatSnapshot())
            5.缓存:cache directive
       1.2 ClientDataProtocol:客户端与datanode之间的接口,主要用于客户端获取数据节点信息时的调用。
            其方法:getReplicVisibleLength()从数据节点获取某个数据块的副本数据长度。getBlockLocalPath()获取节点上文件的本地路径。refreshNamenode()用于                触发指定的Datanode从新加载配置文件。shutdownDatanode关闭数据节点。getDatanodeInfo()获取指定Datanode的信息。startReconfiguration()触发Datanode异                步从磁盘重新加载配置
        1.3 DatanodeProtocol:数据节点通过这个接口与名字节点通信。
            DatanodeProtocol是Datanode与Namenode之间接口,Datanode会用这个接口箱Namenode握手,注册,发送心跳,进行全量及增量的数据块汇报。
            Datanode启动相关方法:一个完整的Datanode启动操作会与Namenode进行4次操作,也就是调用四次DatanodeProtocol定义的方法,首先调用versionRequest()与                Namenode握手操作,这方法返回时NamespaceInfo对象,这个对象封装了HDFS集群的命名空间信息(含有cpu,版本信息,等系统信息),Namenode接受到这些信 息后 会与HDFS信息比对,判断是否匹配。然后再调用registerDatanode()向Namenode注册当前的Datanode,当注册成功后调用blockReport()汇报Datanode上存储的数据                块,Namenode接受到blockreport()请求后,会根据Datanode上报的数据块存储情况建立数据块与数据节点之间的对应关系,同时Datanode会在blockReport()的响                应中携带名字节点指令,通知数据节点进行重新注册,发送心跳,备份或者删除datanode本地磁盘上数据块副本操作,这些指令都在DatanodeCommand对象封装的。                最后调用cacheReport()汇报Datanode缓存的所有数据块。
        #InterDatanodeProtocol:数据节点与数据节点之间接口,数据节点通过这个接口和其他数据节点通信,主要用于数据块的恢复,以及同步数据节点上存储的数据副本信息。
            InterDatanodeProtocol是Datanode和Datanode之间接口,主要用于租约恢复操作。
            主恢复操作:就是将数据管道中所有的数据节点上保存的同一个数据块状态(时间戳和数据块长度)同步一致。当成功完成租约恢复后,主恢复节点会调用                    commitBlockSynchronzization()方法同步Namenode节点上该数据块的时间戳和数据块长度,必须保证名字节点和数据块节点一致。
            时间戳(timestamp),一个能表示一份数据在某个特定时间之前已经存在的、 完整的、 可验证的数据,通常是一个字符序列,唯一地标识某一刻的时间。
        #NamenodeProtocol:第二个名字节点和名字节点间接口。