zoukankan      html  css  js  c++  java
  • HDFS Protocol修改流程

        相对于1.x版本的Hadoop,2.x版本的Hadoop采用了Protocol Buffer作为序列化反序列化工具,以及RPC通讯工具。这样当我们对Hadoop源码进行修改之前,就需要了解Hadoop 2.x的代码结构和修改方法。

        几个结构,以DatanodeProtocol举列子:

    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中。


        1、DatanodeProtocol.proto 

    PB文件,定义了message以及service,如果

    NewImage

        PB文件,定义了message以及service,如果加入一个接口,需要在其内部定义rpc service。

        编辑好后需要通过protoc进行编译,使用maven默认的goal mvn generate-sources即可以。


        2、DatanodeProtocolPB.java

    NewImage

     


        3、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实现了兼容。


        4、DatanodeProtocolServerSideTranslatorPB.java

        与DatanodeProtocolClientSideTranslatorPB作用一样,其作用是将序列化为PB格式的类转化为POJO类,调用NameNode实现,并将结果返回给DataNode。

    NewImage

     

        而NameNode部分,只需要将自身实现注册到DatanodeProtocolServerSideTranslatorPB即可。

    NewImage
     
     

        综上,修改Hadoop2.x的源码需要经过以下几步:

        1、需改proto文件,并且通过maven编译

        2、需改clientTranslator和serverTranslator部分

        3、需改相应的POJO实现类即可

  • 相关阅读:
    oracle 自动备份
    oracle 常用操作语句
    数据库创建及使用注意事项
    oracle 导入 导出 备份
    http://blog.sina.com.cn/s/blog_5fc8b3810100iw9n.html
    利用普通工具编译的第一个Servlet
    对java:comp/env的研究(转)
    MyEclipse配置tomcat、jdk和发布第一个web项目
    构建 SSH 框架(转)
    Java Project和Web Project
  • 原文地址:https://www.cnblogs.com/sidmeng/p/3830908.html
Copyright © 2011-2022 走看看