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实现类便可

相关文章
相关标签/搜索