本篇的配置环境是基于 HDFS HA系列实验之二:HA+JournalNode+zookeeper
上进行的。
1:原理图
DNS:productserver
HA1(nameservices为cluster1):product201、product202
HA2(nameservices为cluster2):product211、product212
DN:product203、product204、product213、product214
JouralNode:product212、product213、product214
zookeeper:product202、product203、product204
B:实验环境之说明
product201、product202组成nameservices为cluster1的NN HA;
product211、product212组成nameservices为cluster2的NN HA;
product203、product204、product213、product214组成一个DataNode集群,提供HDFS存储;
product212、product213、product214组成的JournalNode集群,提供cluster1、cluster2各自active NN写入的EditLog共享目录,注意不同的nameservices要使用不同的共享目录。
product202、product203、product204组成zookeeper集群,提供cluster1、cluster2的NN HA的自动切换;
2:ssh无密码登陆配置
对本实验中的
product201、product202、
product203、product204、
product211、product212、
product213、product214进行ssh无密码登陆配置,具体做法参看
HDFS HA系列实验之经验总结
中
6:关于ssh免密码的操作步骤。
3:hadoop集群配置
A:修改 HDFS HA系列实验之二:HA+JournalNode+zookeeper
中的配置文件hdfs-site.xml文件如下,并发放给所有节点。
<configuration>
<property>
<name>dfs.nameservices</name>
<value>cluster1,cluster2</value>
</property>
<!-- hadoop cluster1 -->
<property>
<name>dfs.ha.namenodes.cluster1</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.cluster1.nn1</name>
<value>product201:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.cluster1.nn2</name>
<value>product202:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.cluster1.nn1</name>
<value>product201:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.cluster1.nn2</name>
<value>product202:50070</value>
</property>
<!-- hadoop cluster2 -->
<property>
<name>dfs.ha.namenodes.cluster2</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.cluster2.nn1</name>
<value>product211:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.cluster2.nn2</name>
<value>product212:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.cluster2.nn1</name>
<value>product211:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.cluster2.nn2</name>
<value>product212:50070</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///app/hadoop/hadoop220/mydata/name</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://product212:8485;product213:8485;product214:8485/cluster1</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///app/hadoop/hadoop220/mydata/data</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>product202:2181,product203:2181,product204:2181</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>/app/hadoop/hadoop220/mydata/journal/</value>
</property>
</configuration>
B:
修改 HDFS HA系列实验之二:HA+JournalNode+zookeeper
中的配置文件slaves文件如下,并发放给所有节点。
product203
product204
product213
product214
C:修改节点
product211、product212的hdfs-site.xml文件下列配置,使cluster2的NN HA使用JournalNode的不同共享目录,千万不能和cluster1的存放在同一共享目录。
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://product212:8485;product213:8485;product214:8485/cluster2</value>
</property>
4:hadoop Federation初次启动
启动的过程可以参看
HDFS HA系列实验之经验总结
中1:Hadoop HA启动流程图。
具体做法如下:
A:启动zookeeper
[hadoop@product202 hadoop220]$ /app/hadoop/zookeeper345/bin/zkServer.sh start
[hadoop@product203 hadoop220]$ /app/hadoop/zookeeper345/bin/zkServer.sh start
[hadoop@product204 hadoop220]$ /app/hadoop/zookeeper345/bin/zkServer.sh start
B:启动JournalNode
[hadoop@product212 hadoop220]$ /app/hadoop/hadoop220/sbin/hadoop-daemon.sh start journalnode
[hadoop@product213 hadoop220]$ /app/hadoop/hadoop220/sbin/hadoop-daemon.sh start journalnode
[hadoop@product214 hadoop220]$ /app/hadoop/hadoop220/sbin/hadoop-daemon.sh start journalnode
C:启动cluster1
格式化namenode并注册zookeeper锁
[hadoop@product201 hadoop220]$ bin/hdfs namenode -format -clusterid mycluster
[hadoop@product201 hadoop220]$ bin/hdfs zkfc -formatZK
启动nn1
[hadoop@product201 hadoop220]$ hadoop-daemon.sh start zkfc
[hadoop@product201 hadoop220]$ sbin/hadoop-daemon.sh start namenode
启动nn2,在nn2上同步nn1的元数据信息
[hadoop@product202 hadoop220]$ hadoop-daemon.sh start zkfc
[hadoop@product202 hadoop220]$ bin/hdfs namenode -bootstrapStandby
[hadoop@product202 hadoop220]$ sbin/hadoop-daemon.sh start namenode
D:启动cluster2
格式化namenode并注册zookeeper锁
[hadoop@product211 hadoop220]$ bin/hdfs namenode -format -clusterid mycluster
[hadoop@product211 hadoop220]$ bin/hdfs zkfc -formatZK
启动nn1
[hadoop@product211 hadoop220]$ hadoop-daemon.sh start zkfc
[hadoop@product211 hadoop220]$ sbin/hadoop-daemon.sh start namenode
启动nn2,在nn2上同步nn1的元数据信息
[hadoop@product212 hadoop220]$ hadoop-daemon.sh start zkfc
[hadoop@product212 hadoop220]$ bin/hdfs namenode -bootstrapStandby
[hadoop@product212 hadoop220]$ sbin/hadoop-daemon.sh start namenode
E:
启动datanode
[hadoop@product201 hadoop220]$ sbin/hadoop-daemons.sh start datanode
5:hadoop Federation测试
A:在cluster1 NN上创建目录,然后查看cluster2 NN的状态
B:在
cluster2 NN上创建目录,然后查看cluster1 NN的状态
C:结论
Federation中的各NN维护着各自的元数据,但他们公用了DataNode的资源。
疑问:
1:客户端如何访问某一个NN?显然,NN的切换和多个NN,造成了client访问的复杂性,如何方便的访问NN HA + Federation是一个重要的课题。具体操作请参看 HDFS HA系列实验之五:client 配置
2:Federation提供了NN的横向扩展,那么如何增加和缩减NN,如何balance共享的datanode?具体操作请参看 HDFS HA系列实验之六:Federation之增减NN和Balancer
TIPS:
相关hadoop配置文件下载(HA+JN+ZK+Federation)