HDFS HA系列实验之四:HA+Federation

本篇的配置环境是基于 HDFS HA系列实验之二:HA+JournalNode+zookeeper   上进行的。
1:原理图
HDFS HA系列实验之四:HA+Federation_第1张图片
   
 A:实验环境之组成
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)

你可能感兴趣的:(hadoop,hdfs,HA)