Hadoop2.2.0基于QJM的HA实践

日志分析集群已经搭建起来了,但是我总觉得NN没有采用HA是一个大大的隐忧,让我一直不敢把测试集群正式投入使用,总是担心把大批量的日志文件弄过来后,NN挂掉或者硬盘故障的话那就什么都白费工夫,遂决定要把NN的HA也搞起来。

Hadoop2.2.0的NN的HA目前有两种方式,贫民的方式自然是QJM了,它会采用类似Zookeepr的方式来保存NN的LOG,而NFS的模式显然不是我等几台机器组成的集群的选项,那是高大上的土豪们的选择。

话说QJM也不是很难配置的,基于之前搭建的测试集群只要稍微调整下配置即可。我这里采用的是lrts216、lrts217作为主备NN节点,lrts216、lrts217、lrts218则分别作为journal节点,另外也要在lrts216、lrts217、lrts218三台机器上分别搭建Zookeeper3.4.5构成一个ZK的集群,来实现NN的自动切换。

(1)搭建Zookeeper的集群

在我的3台测试机器lrts216、lrts217、lrts218上搭建Zookeeper集群,采用的版本为3.4.5,这个搭建比较简单,可以一找一大把的资料。

(2)修改Hadoop的配置,支持QJM

在/home/hadoop/hadoop-2.2.0/etc/hadoop/hdfs-site.xml中追加:

        <property>
  <name>dfs.nameservices</name>
  <value>lrtscluster</value>
 </property>

 <property>
  <name>dfs.ha.namenodes.lrtscluster</name>
  <value>nn216,nn217</value>
 </property>

 <property>
  <name>dfs.namenode.rpc-address.lrtscluster.nn216</name>
  <value>lrts216:8020</value>
 </property>

 <property>
  <name>dfs.namenode.rpc-address.lrtscluster.nn217</name>
  <value>lrts217:8020</value>
 </property>
 <property>
  <name>dfs.namenode.http-address.lrtscluster.nn216</name>
  <value>lrts216:50070</value>
 </property>
 <property>
  <name>dfs.namenode.http-address.lrtscluster.nn217</name>
  <value>lrts217:50070</value>
 </property>
 <property>
  <name>dfs.namenode.shared.edits.dir</name>
  <value>qjournal://lrts216:8485;lrts217:8485;lrts218:8485/lrtscluster
  </value>
 </property>
 <property>
  <name>dfs.client.failover.proxy.provider.lrtscluster</name>
  <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
  </value>
 </property>

 <property>
  <name>dfs.ha.fencing.methods</name>
  <value>sshfence</value>
 </property>

 <property>
  <name>dfs.ha.fencing.ssh.private-key-files</name>
  <value>/home/hadoop/.ssh/id_rsa</value>
 </property>
 <property>
  <name>dfs.journalnode.edits.dir</name>
  <value>/home/hadoop/hadoop-2.2.0/journal</value>
 </property>
 <property>
  <name>dfs.ha.automatic-failover.enabled</name>
  <value>true</value>
 </property>

同时要修改下原来的配置,注释掉原来对dfs.namenode.http-address的配置:

    <!--
 <property>
  <name>dfs.namenode.http-address</name>
  <value>lrts216:50070</value>
  <description>
   The address and the base port where the dfs namenode web ui will listen on.
  </description>
 </property>
  -->

 另外一个需要追加修改的配置/home/hadoop/hadoop-2.2.0/etc/hadoop/core-site.xml:

 <property>
  <name>ha.zookeeper.quorum</name>
  <value>lrts216:2181,lrts217:2181,lrts218:2181</value>
 </property>

 

--------------------------------------分割线 --------------------------------------

相关阅读

--------------------------------------分割线 --------------------------------------

相关推荐