1.删除masters
2.删除hdfs-site.xml中的secondary配置
3.编辑hdfs-site.xml
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>machine1.example.com:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>machine2.example.com:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>machine1.example.com:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>machine2.example.com:50070</value>
</property>
其中,machine1.example.com为namenode1的节点域名,machine2.example.com为namenode2的节点域名
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node1.example.com:8485;node2.example.com:8485;node3.example.com: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>
/home/exampleuser/.ssh/id_rsa 为私钥地址。
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/journal/</value>
</property>
指定journalnode存放目录。
4.编辑core-site.xml文件
修改客户端入口:
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop</value>
</property>
</configuration>
5.增加自动切换。 hdfs-site.xml
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
6.增加zk配置 core-site.xml
<property>
<name>ha.zookeeper.quorum</name>
<value>zk1.example.com:2181,zk2.example.com:2181,zk3.example.com:2181</value>
</property>
7.将配置好的文件拷贝到其他节点。namenode高可用的所有节点需要互相免密码访问。
8.在journalnode节点上启动journalnode
hadoop-daemon.sh start journalnode (只是启动单节点,不可启动整个集群)
9.查看journalnode启动结果,查看日志hadoop/logs 下hadoop-root-journalnode-**.log
10.初始化同步两台namenode的原数据:
10.1 格式化其中任意一台namenode hdfs namenode -format
10.2 将其中一台namenode 的 fsimage数据完全拷贝到另一台 相同目录下。scp -r /opt/hadoop tq@node5:/opt/hadoop
或 在没有格式化的namenode上执行:
1. 把刚刚格式化之后的元数据拷贝到另外一个namenode上
a) 启动刚刚格式化的namenode :hadoop-daemone.sh start namenode
b) 在没有格式化的namenode上执行:hdfs namenode -bootstrapStandby
c) 启动第二个namenode
10.3 将datanode /opt/hadoop中的内容也删除
11.格式化zookeeper
在任意namenode节点执行 hdfs zkfc -formatZK
12.在免密码登录的节点上启动hadoop : start-dfs.sh
13.FailoverController帮namenode节点切换active/standby 一旦切换不了,查看FailoverController日志。hadoop-root-zkfc-*.log
2.删除hdfs-site.xml中的secondary配置
3.编辑hdfs-site.xml
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>machine1.example.com:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>machine2.example.com:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>machine1.example.com:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>machine2.example.com:50070</value>
</property>
其中,machine1.example.com为namenode1的节点域名,machine2.example.com为namenode2的节点域名
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node1.example.com:8485;node2.example.com:8485;node3.example.com: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>
/home/exampleuser/.ssh/id_rsa 为私钥地址。
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/journal/</value>
</property>
指定journalnode存放目录。
4.编辑core-site.xml文件
修改客户端入口:
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop</value>
</property>
</configuration>
5.增加自动切换。 hdfs-site.xml
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
6.增加zk配置 core-site.xml
<property>
<name>ha.zookeeper.quorum</name>
<value>zk1.example.com:2181,zk2.example.com:2181,zk3.example.com:2181</value>
</property>
7.将配置好的文件拷贝到其他节点。namenode高可用的所有节点需要互相免密码访问。
8.在journalnode节点上启动journalnode
hadoop-daemon.sh start journalnode (只是启动单节点,不可启动整个集群)
9.查看journalnode启动结果,查看日志hadoop/logs 下hadoop-root-journalnode-**.log
10.初始化同步两台namenode的原数据:
10.1 格式化其中任意一台namenode hdfs namenode -format
10.2 将其中一台namenode 的 fsimage数据完全拷贝到另一台 相同目录下。scp -r /opt/hadoop tq@node5:/opt/hadoop
或 在没有格式化的namenode上执行:
1. 把刚刚格式化之后的元数据拷贝到另外一个namenode上
a) 启动刚刚格式化的namenode :hadoop-daemone.sh start namenode
b) 在没有格式化的namenode上执行:hdfs namenode -bootstrapStandby
c) 启动第二个namenode
10.3 将datanode /opt/hadoop中的内容也删除
11.格式化zookeeper
在任意namenode节点执行 hdfs zkfc -formatZK
12.在免密码登录的节点上启动hadoop : start-dfs.sh
13.FailoverController帮namenode节点切换active/standby 一旦切换不了,查看FailoverController日志。hadoop-root-zkfc-*.log