本想使用现有的轮子学习Hadoop,但是本着自己动手丰衣足食的心态,还是自己造一个轮子吧。

主要的资料来源,最好不过官方文档:http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html

整体的结构如图所示。在Hadoop2.x中,为了使多个NameNode共享信息,所以出现了中间绿色部分的JournaleNode。ZK是为了NameNode的调度。其他就不做解释了

步骤说明:

docker-compose.yml请参考GitHub  https://github.com/lsw1991abc/dockercomposes/tree/master/hadoop-ha-qjm

  • 分别进入JournalNode,启动JournalNode
hadoop-daemon.sh start journalnode
  • 进入任意一个NameNode,格式化NameNode数据
hdfs namenode -format
  • 使备NameNode同步主NameNode首先启动主NameNode,也就是第2步操作的NameNode,启动
hadoop-daemon.sh start namenode

然后进入备NameNode,执行同步

hdfs namenode -bootstrapStandby
  • 初始化NameNode信息到ZK。在任意NameNode节点执行。(在实验过程中,遇到NameNode无法连接ZK问题,原因是ZK自己启动出现了问题导致的)
hdfs zkfc -formatZK

到这里,节点的初始化已基本结束

  • 停止所有节点,并重新启动
stop-dfs.sh

start-dfs.sh && start-yarn.sh
  • 完成!!!
    文件的说明请参考GitHub。如有问题,欢迎留言,共同学习!

感谢大家的阅读, 如有疑问可以加我微信