Hadoop HA了解:
由于hadoop集群中所有数据信息存储在namenode上,因此namenode成为集群的核心,也是安全隐患,如果namenode因故障停止或者损坏,将导致集群的无法正常运行,或者说数据的丢失发生。因此对namenode的备份显得尤其重要,scondarynamenode机制虽然可以解决数据丢失的问题,但对于生产环境的稳定运行与连续运行要求,显然也满足不了,因此dfs、journal、zk等解决方案,成为选择,目前比较流行的是journal架构解决方案,如下图:
Journal解决方案原理:
1、 将edits文件利用journal实现数据一致性,即将文件存储在共享目录中,实现多台namenode数据共享,解决数据一致性的问题。Journal本身是一组有容错机制的存储方案,每次存储数据都可以存储在多台节点上,必需为奇数。
2、 统一命令空间,保障集群内只有一台主namenode提供服务,即状态为:active,同时准备一台namenoe作为等待状态,即状态为:standby状态,如果主namenode出现问题,可以实现随时将另一台standby的namenode切换为activenamenode,继续为集群提供服务
3、 两台namenode同时接受datanode的信息,一台出现问题,保障不影响集群的正常运行与数据完整
4、 隔离性
Hadoop HA配置:
1、集群规划:
bigdata01 | bigdata02 |
nn1 | nn2 |
2、在nn1节点上,编译core.site.xml和hdfs-site.xml,配置如下:
Core-site.xml:
图1
hdfs-site.xml,如图2图3:
图2
图3
3、接下来在$HADOOP_HOME/data目录里面创建jn目录,注意两个nn上都要创建,用来保存edits日志,如图4:
图4
3、将nn1的配置文件core-site.xml和hdfs-site.xml文件复制到nn2节点对应目录
4、在各个JournalNode节点上,输入以下命令启动journalnode服务:sbin/hadoop-daemon.sh start journalnode,如图5:
图5
5、在nn1上,对其进行格式化,并启动,如图6:
格式化语句:bin/hdfsnamenode -format
启动语句:sbin/hadoop-daemon.shstart namenode
5、 在nn2上,同步nn1的元数据信息:bin/hdfsnamenode –bootstrapStandby
6、 在nn2上启动namenoe: sbin/hadoop-daemon.sh start namenode,如图8:
图8
7、 从WEB 页面查看两台namenode的状态,如图9图10:
图9
图10
8、 将nn1状态改为:active,如图11:
图11
9、 从nn1节点上,启动所有datanode:sbin/hadoop-daemons.sh start datanode,如图12:
图12
10、 从nn1上使命令:hdfs dfs –mkdir /bigdata创建文件夹,在nn1(active)上可以查看到添加的目录,如下图13:
此时从nn2上可以观察到,datanode的变化与nn1是一致,但目录是看不到的,因为集群中只能有一个nn向外提供服务,如图14:
图14
使用命令:bin/hdfs haadmin-failover --forcefence --forceactive nn1 nn2,将nn2 切换为:active,就可以看到从nn1上建立的目录,如图15:
图15
注:在由nn1手工切换到nn2后,nn1需要重新打开namenode,重新打开后状态为:standby状态。
配置HA自动故障转移:
1、在core-site.xml中添加代码:
<property>
<name>ha.zookeeper.quorum</name>
<value>bigdata01.ibeifeng.com:2181,bigdata02.ibeifeng.com:2181,bigdata03.ibeifeng.com:2181</value>
</property>
2、在hdfs-site.xml中添加代码:
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
3、将修改 的文件复制到另外两台节点上
4、关闭所有HDFS 服务 sbin/stop-dfs.sh
5、启动各个节点的zkServer服务:bin/zkServer.sh start,查看是否进程,如图16:
图16
6、格式化zk集群,在bigdata01上执行bin/hdfs zkfc -formatZK,应该会在Zookeeper看到输出结果。
7、启动journalnode集群,在bigdata01、bigdata02、bigdata03上分别执行sbin/hadoop-daemon.sh start journalnode,启动jn服务,如图17:
图17
8、格式化namenode、启动namenode,注:先rm –rf data/dfs/data文件,要不datanode会启动报错
在bigdata01上执行bin/hdfs namenode -format
在bigdata01上执行sbin/hadoop-daemon.sh start namenode
在bigdata02上执行bin/hdfs namenode -bootstrapStandby
在bigdata02上执行sbin/hadoop-daemon.sh start namenode
9、启动datanode,在bigdata01上执行sbin/hadoop-daemons.sh start datanode
10、启动ZKFC(哪个节点上有namenode,在哪个节点启动),在bigdata01、bigdata02上 启动zkfc,执行命令sbin/hadoop-daemon.sh start zkfc
11、启动resourcemanager 在bigdata01上执行 bin/start-yarn.sh start resourcemanager
12、启动nodemanager在bigdata01上执行 sbin/start-yarn.sh start nodemanager
13、打开WEB页面观察bigdata01(active)图18和bigdata02(standby图19)状态,:
图18
图19
14、测试是否可以自动切换,在bigdata01执行jps,查看namenode进程号,然后kill 进程号,然后再观察bigdata02的状态是否切换到active,如果切换成功,则说明说明Hadoop HA配置成功,如下图20:
图20