我们知道Hadoop1.x之前的namenode存在两个主要的问题:1、namenode内存瓶颈的问题,2、namenode的单点故障的问题。针对这两个问题,hadoop2.x都对它进行改进和解决。其中,问题1中对namenode内存瓶颈的问题采用扩展namenode的方式来解决。对于问题2中的namenode的单点故障问题hadoop2.x采用的是HA的解决方案。apache hadoop 官方网站上提供了两种解决HDFS High Availability Using the Quorum Journal Manager 和High Availability with NFS。
本文是采用HDFS High Availability Using the Quorum Journal Manager 方案来实现HA。并且实现namenode单点故障自动切换的功能,这就需要借助与zookeeper集群来实现。下面详细的讲解一下通过zookeeper来实现HDFS High Availability Using the Quorum Journal Manager 单点故障自动切换的方案。
在介绍之前,首先说明一下我的集群规模:2个namenode(hadoop1,hadoop5),3个datanode(hadoop2,hadoop3,hadoop4)。
------------------------------------------------------------------------------------------------
| IP地址 | 主机名 | NameNode | journalNode | DataNode | zookeeper |
| 192.168.1.21 | hadoop1 | 是 | 是 | 否 | 是 |
| 192.168.1.22 | hadoop2 | 否 | 是 | 是 | 是 |
| 192.168.1.23 | hadoop3 | 否 | 是 | 是 | 是 |
| 192.168.1.24 | hadoop4 | 否 | 是 | 是 | 是 |
| 192.168.1.25 | hadoop5 | 是 | 是 | 否 | 是 |
--------------------------------------------------------------------------------------------------
1、首先当然是安装zookeeper的集群了
对于该集群的安装可以参考另一篇文章: 。这篇文章详细介绍了zookeeper的安装
2、安装好了zookeeper集群之后,下一步就需要部署你自己的hadoop2.x的集群了。
对于hadoop2.x的集群,我部署的是hadoop2.6.0的集群,部署方法可以参考文章: 。这篇文章当中详细介绍了如何安装和部署简单的hadoop的集群。
3、这里对journalnode进行说明一下,这个节点是一个轻量级的进行,可以与hadoop的集群部署在同一台机器上,并且,它的部署只需要添加hadoop相应的配置参数即可。
4、修改hadoop集群的配置文件,这里需要修改的配置文件较多,修改的参数更多,并且比较重要。
(1)修改core-site.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="https://www.linuxidc.com/configuration.xsl"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop1:2181,hadoop2:2181,hadoop3:2181,hadoop4:2181,hadoop5:2181</value>
</property>
<!--
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>