在上一篇文章《Hadoop2.0 federation的配置》(见 )中介绍了单独配置federation,本文继续介绍同时配置HA和federation。关于zookeeper的安装和配置,这里不做介绍,大家可以参考网上的资料。
1 准备
假定已经有一个zookeeper集群,包含3个zookeeper节点:
zookeeper1
zookeeper2
zookeeper3
另外,还有4个namenode节点:
namenode1
namenode2
namenode3
namenode4
和3个journalnode节点:
journalnode1
journalnode2
journalnode3
其他机器角色本文中不涉及的可以参考《hadoop2.0的安装和基本配置》一文。
2 federation和HA的结构
我们假定hadoop集群的clusterid是hellokitty,有2个namespace/name service,分别是“mycluster”和“yourcluster”,分别挂载在viewfs的“/my”和“/your”目录下。
“mycluster”和“yourcluster”都配置成HA。其中“mycluster”的两个主备namenode节点分别是namenode1和namenode2,NN_ID分别是“nn1”和“nn2”;“yourcluster”的两个主备namenode节点分别是namenode3和namenode4,NN_ID分别是的“nn1”和“nn2”。
如下图所示:
3 federation和HA的配置
federation和HA的配置只涉及到core-site.xml和hdfs-site.xml两个配置文件,其他配置可以文件参考《Hadoop2.0的安装和基本配置》一文(见 )。
为了简单起见,我们先不配置HA的自动切换,后面再把HA的自动切换配置上。
3.1 core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>viewfs:///</value>
</property>
<property>
<name>fs.viewfs.mounttable.default.link./my</name>
<value>hdfs://mycluster/</value>
</property>
<property>
<name>fs.viewfs.mounttable.default.link./your</name>
<value>hdfs://yourcluster/</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/tmp/hadoop2.0</value>
</property>
</configuration>
3.2 hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/dfs/data</value>
</property>
<property>
<name>dfs.datanode.edit.dir</name>
<value>/home/dfs/edit</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<property>
<name>dfs.nameservices</name>
<value>mycluster,yourcluster</value>
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.ha.namenodes.yourcluster</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>namenode1:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>namenode2:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.yourcluster.nn1</name>
<value>namenode1:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.yourcluster.nn2</name>
<value>namenode2:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>namenode1:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>namenode2:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.yourcluster.nn1</name>
<value>namenode1:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.yourcluster.nn2</name>
<value>namenode2:50070</value>
</property>
<!--dfs.namenode.shared.edits.dir的配置在namenode1和namenode2上用以下这个-->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://journalnode1:8485;journalnode2:8485;journalnode3:8485/mycluster</value>
</property>
<!--dfs.namenode.shared.edits.dir的配置在namenode3和namenode4上用以下这个
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://journalnode1:8485;journalnode2:8485;journalnode3:8485/yourcluster</value>
</property>
-->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/dfs/journal</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.yourcluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>shell(/bin/true)</value>
</property>
</configuration>
dfs.namenode.shared.edits.dir
这个参数要注意,在两组HA中的值是不一样的,即在“mycluster”(namenode1和namenode2)和是“yourcluster”(namenode3和namenode4)中是不同。