设为首页 加入收藏

TOP

HDFS Protocol修改流程
2018-12-13 11:59:20 】 浏览:49
Tags:HDFS Protocol 修改 流程

转载地址:http://dj1211.com/p=51#more-51

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

几个结构,以DatanodeProtocol举列子:

NewImage HDFS Protocol修改流程NewImage1 HDFS Protocol修改流程

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,如果

NewImage2 HDFS Protocol修改流程

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

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


2、DatanodeProtocolPB.java

NewImage3 HDFS Protocol修改流程


3、DatanodeProtocolClientSideTranslatorPB.java
DatanodeProtocol两端Client是DataNode,向NameNode发送RPC请求,Server端是NameNode,接收请求,做出相应的处理,并把结构返回给DataNode。

所以,顾名思义,DatanodeProtocolClientSideTranslatorPB就是在DataNode端将普通的请求,转化为PB格式的请求,发送给NameNode进行处理。

比如:

NewImage4 HDFS Protocol修改流程

下面的ReportBadBlocks,就是将pojo的blocks类,转化为PB格式,并通过底层Server类封装好的RPC发送给NameNode。

NewImage5 HDFS Protocol修改流程

在DataNode部分,只需要关注逻辑,如红框所示,而不需要关注任何PB的细节,与1.x实现了兼容。


4、DatanodeProtocolServerSideTranslatorPB.java

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

NewImage6 HDFS Protocol修改流程

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

NewImage7 HDFS Protocol修改流程

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

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

2、需改clientTranslator和serverTranslator部分

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


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇传统的HDFS单Namenode架构的局限性 下一篇HDFS数据副本

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目