1.创建软连接:指向hadoop_cluster_HA
2.修改【hdfs-site.xml】
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
//指定两个namenode的唯一标识:注意一定是两个
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
//修改namenode RPC访问端口
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>master:9000</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>slave1:9000</value>
</property>
//修改http-WEBUI访问端口
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>master:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>slave1:50070</value>
</property>
//标识NameNodes写入/读取编辑的一组JNs的URI
<property>
<name>dfs.namenode.shared.edits.dir</name>
<valueqjournal://master:8485;slave1:8485;slave2:8485/mycluster</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.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/exampleuser/.ssh/id_rsa</value>
</property>
3.修改【core-site.xml】
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/hyxy/tmp/journal</value>
</property>
4.将所有配置项分发至其他节点
$>scp -r hadoop_cluater_ha hyxy@slave1:~/soft/hadoop/etc/
$>scp -r hadoop_cluater_ha hyxy@slave2:~/soft/hadoop/etc/
5.在【master:8485;slave1:8485;slave2:8485】三个节点上分别开启journalnode
$>hadoop-daemon.sh start journalnode
$>jps
6.一旦启动了JournalNodes,就必须首先同步两个HA NameNodes的磁盘元数据。
a.如果要设置新的HDFS集群,则应首先在其中一个NameNode上运行format命令
$>hdfs namenode -format
慎用!!!
b.如果您已经格式化了NameNode,或者正在将启用了HA的群集转换为启用HA,
在未格式化的NameNode上,则现在应该通过运行命令“ hdfs namenode -bootstrapStandby”将NameNode元数据目录 的内容复制到另
一个未格式化的NameNode上。
运行此命令还将确保JournalNodes(由dfs.namenode.shared.edits.dir配置)包含足够的编辑事务,以便能够启动两个NameNode。
确保JournalNodes开启,在nn2上执行以下命令;
$>hadoop-daemon.sh start namenode(首先在nn1开启namenode进程)
$>hdfs namenode -bootstrapStandby
说明:将nn1节点的fsimage复制到nn2中【{HADOOP_TMP_DIR}/dfs/name】
c.如果要将非HA NameNode转换为HA,则应运行命令“ hdfs namenode -initializeSharedEdits ”,该命令将使用来自本地NameNode编辑目录的编辑数据初始化JournalNodes。
在nn1上,执行以下命令;
$>hadoop-daemon.sh stop namenode(关闭namenode)
$>hdfs namenode -initializeSharedEdits
7.start-dfs.sh
8.验证:分别打开WebUI,查看nn1和nn2的相关信息,均为standby(备用状态)
9.HA 集群管理:
用法:hdfs haadmin
[ -transitionToActive <serviceId>] // 将给定NameNode的状态转换为Active
[-transitionToStandby <serviceId>] // 将给定NameNode的状态转换为Standby
[-failover [--forcefence] [--forceactive] <serviceId> <serviceId>]
[-getServiceState <serviceId>]
[-checkHealth <serviceId> ]
[-help <command>]
手动切换Active/Standby状态:
$>hdfs haadmin -transitionToActive nn1
$>hadoop fs -put tt.txt
$>hdfs haadmin -transitionToStandby nn1
$>hdfs haadmin -transitionToActive nn2
$>hadoop fs -put tt1.txt