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即可以。

 

Continue reading…

NameNode HA滚动升级方案

Hadoop 滚动升级非常方便,只需要在配置中增加一些选项就可以通过Hadoop自身的代码进行完成。

步骤:

1、首先到需要升级的NameService的Active NameNode上面,比如我们10.39.2.131是ns1的Active NameNode。

 

2、新增加的配置:

<property>

<name>dfs.ha.fencing.methods</name>

<value>shell(/bin/true)</value>

</property>

 

3、在ActiveNameNode上面使用命令

hdfs haadmin -ns ns1 -failover nn1 nn2

将nn1切换为Standby,nn2切换为Active。随后看一下web页面,确认这一过程完成顺利。

(如果这一过程失败,采用手动切换。

(1)如果ActiveNameNode没有切换为StandbyNameNode

hdfs haadmin -ns ns1 -transitionToStandby nn1

(2)确认nn1进入standby状态,防止client读取过期的数据。

hdfs haadmin -ns ns2 -transitionToActive nn2)

 

Continue reading…