HDFS Protocol修改流程

    相對於1.x版本的Hadoop,2.x版本的Hadoop採用了Protocol Buffer做爲序列化反序列化工具,以及RPC通信工具。這樣當咱們對Hadoop源碼進行修改以前,就須要瞭解Hadoop 2.x的代碼結構和修改方法。java

    幾個結構,以DatanodeProtocol舉列子:node

NewImageNewImage

    DatanodeProtocol.java 還像1.x同樣只是一個接口,NameNode繼承這一個接口,實現全部功能,但2.x新增了DatanodeProtocolPB.java,DatanodeProtocolClientSideTranslatorPB.java, DatanodeProtocolServerSideTranslatorPB.java三個類。除此以外,還有PB文件,路徑在$HADOOP_SOURCE_HOME/hadoop-hdfs-project/hadoop-hdfs/src/main/proto/。maven編譯的時候會將相應的類生成到target目錄下,並加入CLASSPATH中。maven


    一、DatanodeProtocol.proto ide

PB文件,定義了message以及service,若是工具

NewImage

    PB文件,定義了message以及service,若是加入一個接口,須要在其內部定義rpc service。oop

    編輯好後須要經過protoc進行編譯,使用maven默認的goal mvn generate-sources便可以。spa


    二、DatanodeProtocolPB.javaserver

NewImage

 


    三、DatanodeProtocolClientSideTranslatorPB.java
    DatanodeProtocol兩端Client是DataNode,向NameNode發送RPC請求,Server端是NameNode,接收請求,作出相應的處理,並把結構返回給DataNode。

    因此,顧名思義,DatanodeProtocolClientSideTranslatorPB就是在DataNode端將普通的請求,轉化爲PB格式的請求,發送給NameNode進行處理。繼承

    好比:接口

NewImage

    下面的ReportBadBlocks,就是將pojo的blocks類,轉化爲PB格式,並經過底層Server類封裝好的RPC發送給NameNode。

NewImage

    在DataNode部分,只須要關注邏輯,如紅框所示,而不須要關注任何PB的細節,與1.x實現了兼容。


    四、DatanodeProtocolServerSideTranslatorPB.java

    與DatanodeProtocolClientSideTranslatorPB做用同樣,其做用是將序列化爲PB格式的類轉化爲POJO類,調用NameNode實現,並將結果返回給DataNode。

NewImage

 

    而NameNode部分,只須要將自身實現註冊到DatanodeProtocolServerSideTranslatorPB便可。

NewImage
 
 

    綜上,修改Hadoop2.x的源碼須要通過如下幾步:

    一、需改proto文件,而且經過maven編譯

    二、需改clientTranslator和serverTranslator部分

    三、需改相應的POJO實現類便可

相關文章
相關標籤/搜索