需要角色进程:nameNode(2个,一个active,一个standby);dataNode(3个),zookeeper(3个),zkfc(健康检查和自动故障转移需要的进程,2个,和两个nameNode在一起),JNN(3个,日志节点,用来同步两个nameNode)。
1.前置准备:java环境,hadoop下载,环境变量配置,nameNode节点向其他节点的免密钥登录(两个nameNode节点需互相免密钥登录,从namenode节点最好也向其余节点免密钥登录,这样也可以在从节点执行start-dfs.sh等命令),详见hadoop1.x伪分布式环境搭建。
2.配置hdfs-site.xml(之前配置的secondaryNamenode就不需要了):
3.配置core-site.xml:
4.配置zookeeper(至少需要在3个节点安装),下载,解压,进入conf,使用zoo-sample.cfg模板,mv zoo-sample.cfg zoo.cfg,设置data目录dataDir=/var/sxt/zk,然后在末尾添加server.1=node01:2888:3888和server.2=node02:2888:3888和server.3=node03:2888:3888, 然后在dataDir目录下添加myid文件,内容为当前节点对于的id号(node01为1),然后将zookeeper分发至其余两个节点(scp -r zookeeper-3.4.10 node02:`pwd`/),在三个节点配置zookeeper的环境变量,最后启动zookeeper(zkServer.sh start),可使用zkServer.sh status查看状态,一起启动的话,id号最大的为leader,其它为follwer
5.在三个节点启动journalnode,hadoop-daemon.sh start journalnode
6.在主节点格式化hdfs(hdfs namenode -format)
7.在主节点启动namenode(hadoop-daemon.sh start namenode),然后在从节点执行hdfs namenode -bootstrapStandby(同步主节点刚刚格式化的信息)
8.在主节点初始化zk( hdfs zkfc -formatZK ),此时在有zookeeper的节点上执行zkCli.sh连入查看节点,在zk中会多一个节点/hadoop-ha/mycluster,就是在hdfs-site.xml配置的namenode集群的名称
9.在主节点启动hdfs,start-dfs.sh
测试:在浏览器查看node01:50070,会发现主和从节点皆可访问,一个active,一个standBy(从节点不能访问文件目录),此时可尝试停掉主节点的namenode(hadoop-daemon.sh stop namenode),然后发现从自动变为了主(在zookeeper中看也会发现相关信息变更为了从节点)
关闭集群:在主节点执行 stop-dfs.sh;再次启动:start-dfs.sh