博主:hadoop_version=2.4.1
java_version=1.7
zooKeeper_version=3.4.5
Linux =CentOs 6.5
1.首先说明HA是什么?
HA意为High Available,高可用性集群,是保证业务连续性的有效解决方案,一般有两个或两个以上的节点,且分为活动节点及备用节点。通常把正在执行业务的称为活动节点,而作为活动节点的一个备份的则称为备用节点。当活动节点出现问题,导致正在运行的业务(任务)不能正常运行时,备用节点此时就会侦测到,并立即接续活动节点来执行业务。从而实现业务的不中断或短暂中断。
2.HA机制的前世今生
2.1 Hadoop_1.X集群的NameNode
Namenode 管理者文件系统的Namespace。它维护着文件系统树(filesystem tree)以及文件树中所有的文件和文件夹的元数据(metadata)。管理这些信息的文件有两个,分别是Namespace 镜像文件(Namespace image)和操作日志文件(edit log),这些信息被Cache在RAM中,当然,这两个文件也会被持久化存储在本地硬盘。Namenode记录着每个文件中各个块所在的数据节点的位置信息,但是他并不持久化存储这些信息,因为这些信息会在系统启动时从数据节点重建。
在hadoop1时代,只有一个NameNode。如果该NameNode数据丢失或者不能工作,那么整个集群就不能恢复了。这是hadoop1中的单点问题,也是hadoop1不可靠的表现。如下图所示,便是hadoop1.0的架构图;
2.2 Hadoop_2.x集群的NameNode
为了解决hadoop1中的单点问题,在hadoop2中新的NameNode不再是只有一个,可以有多个(目前只支持2个(2.4.1版本))。每一个都有相同的职能。一个是active状态的,一个是standby状态的。当集群运行时,只有active状态的NameNode是正常工作的,standby状态的NameNode是处于待命状态的,时刻同步active状态NameNode的数据。一旦active状态的NameNode不能工作,通过手工或者自动切换,standby状态的NameNode就可以转变为active状态的,就可以继续工作了。这就是高可靠。
2.3 JournalNode实现NameNode(Active和Standby)数据的共享
当有两个NameNode,一个standby一个active,当active有数据变动时,standby也应该及时更新,这样才可以做到高可靠!否则,信息不一致还怎么叫高可靠呢?
两个NameNode为了数据同步,会通过一组称作JournalNodes(JNs)的独立进程进行相互通信。当active状态的NameNode的命名空间有任何修改时,会告知大部分的JournalNodes进程。standby状态的NameNode有能力读取JNs中的变更信息,并且一直监控edit log的变化,把变化应用于自己的命名空间。standby可以确保在集群出错时,命名空间状态已经完全同步了
2.4 NameNode之间的故障切换
active的NameNode出现了故障,例如挂机了,是谁去切换standby的NameNode变为active状态呢?这时,就需要引入ZooKeeper。首先HDFS集群中的两个NameNode都在ZooKeeper中注册,当active状态的NameNode出故障时,ZooKeeper能检测到这种情况,它就会自动把standby状态的NameNode切换为active状态
3.Zookeeper集群+Hadoop集群
3.1 前期准备参见:http://blog.youkuaiyun.com/dingchenxixi/article/details/50775650 中 1-2节,Linux的安装以及网络配置
3.2 集群规划
主机名 | IP | 安装软件 | 运行的进程 |
---|---|---|---|
had01 | 192.168.0.141 | jdk,hadoop | NameNode,DFSZKFailoverController(zkfc) |
had02 | 192.168.0.142 | jdk,hadoop | NameNode,DFSZKFailoverController(zkfc) |
had03 | 192.168.0.143 | jdk,hadoop | ResourceManager |
had04 | 192.168.0.144 | jdk,hadoop | ResourceManager |
had05 | 192.168.0.145 | jdk,hadoop,zookeeper | DataNode,NodeManager、JournalNode、QuorumPeerMain |
had06 | 192.168.0.146 | jdk、hadoop、zookeeper | DataNode、NodeManager、JournalNode、QuorumPeerMain |
had07 | 192.168.0.147 | jdk、hadoop、zookeeper | DataNode、NodeManager、JournalNode、QuorumPeerMain |
3.3 安装配置zooKeeper集群(在had05上)
3.3.1 解压zookeeper的jar
tar -zxvf zookeeper-3.4.5.tar.gz -C ~/app
安装在用户主目录下的app文件夹内
3.3.2 修改配置
cd /weekend/zookeeper-3.4.5/conf/
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
修改:dataDir=/home/hadoop/app/zookeeper-3.4.5/tmp
在最后添加:
server.1=had05:2888:3888
server.2=had06:2888:3888
server.3=had07:2888:3888
保存退出
然后创建一个tmp文件夹
mkdir /home/hadoop/app/zookeeper-3.4.5/tmp
再创建一个空文件
touch /home/hadoop/app/zookeeper-3.4.5/tmp/myid
最后向该文件写入ID
echo 1 > /home/hadoop/app/zookeeper-3.4.5/tmp/myid
server.x意义:
zooKeeper工作原理:http://www.cnblogs.com/kunpengit/p/4045334.html
zoo.cfg配置文件:
3.3.3 将配置好的zookeeper拷贝到其它节点
首先分别在had06、had07用户目录下创建一个app目录:mkdir app
scp -r app/zookeeper-3.4.5/ had06:app/
scp -r app/zookeeper-3.4.5/ had07:app/
注意:修改had06、had07对应app/zookeeper-3.4.5/tmp/myid内容
had06:echo 2 > app/zookeeper-3.4.5/tmp/myid
had07:echo 3 > app/zookeeper-