Hadoop集群+Zookeeper实现高可用集群
设备的列表信息
节点类型IPhosts(主机名)
NameNode
192.168.56.106
master
NameNode
192.168.56.107
standby-master
DataNode,JournalNode
192.168.56.108
slave1
DataNode,JournalNode
192.168.56.109
slave2
DataNode,JournalNode
192.168.56.110
slave3
一共配备的5台的设备,master充当(active)角色,standby-master充当(standby)角色,当master出现单点故障的时候,standby-master就会顶上去充当(active)角色来维持整个集群的运作。
搭建Ha集群依赖环境 环境名称版本号CentOS 7
Jdk jdk-8u131
Hadoop 2.6.5
zookeeper 3.4.10
把jdk、Hadoop、zookeeper解压到/use/local/目录下
编辑 /etc/profile文件分别加入jdk、Hadoop的环境变量
vim /etc/profile
加入以下环境变量:
Java_HOME=/usr/local/jdk1.8.0_131/ PATH=$JAVA_HOME/bin:$PATH CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export JAVA_HOME export PATH export CLASSPATH export PATH=$PATH:/usr/local/hadoop-2.6.5/bin:/usr/local/hadoop-2.6.5/sbin
profile环境变量
编辑hadoop-2.6.5/etc/hadoop/hadoop-env.sh文件加入Java环境变量
Hadoop的Java环境变量
这是我本次搭建用到的系统版本。
配备zookeeper集群我会在slave1、slave2、slave3这三台机器上添zookeeper集群,把JournalNode节点交给zookeeper做调度。
解压后进入/zookeeper-3.4.10/conf/目录
拷贝 cp zoo_sample.cfg 改名成 zoo.cfg
拷贝 cp zoo_sample.cfg zoo.cfg
我这里有3台zk集群机器,每台机器都需要在/home/zookeeper/data 目录下创建一个myid的文件、并且要写上自己对应的服务id号,比如我在slave1这台机器对应的service.id是1 那么我在myid就会写上1,slave2的service.id是2 就会写上2.. 以此类推。
cd /home/zookeeper/data/
vim myid (写上服务的id号保存退出)
写了一个脚本设置zookepper开机启动
在/etc/rc.d/init.d/目录下添加一个文件叫zookeeper
命令:touch zookeeper
写入以下配置,JAVA_HOME是你jdk的安装位置,ZOO_LOG_DIR是zookeeper存放日志的位置,ZOOKEEPER_HOME是zookeeper的安装位置。
#!/bin/bash #chkconfig: 2345 10 90 #description: service zookeeper export JAVA_HOME=/usr/local/jdk1.8.0_131 export ZOO_LOG_DIR=/home/zookeeper/datalog ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.10 su root ${ZOOKEEPER_HOME}/bin/zkServer.sh "$1"为新建的zookeeper文件添加可执行权限
命令:chmod +x /etc/rc.d/init.d/zookeeper
添加zookeeper到开机启动
命令:chkconfig --add zookeeper
重启你的的zk集群
检查你的zookeeper集群确保没问题
命令:/usr/local/zookeeper-3.4.10/bin/zkServer.sh status
启动zookeeper集群
以上已经配置好zookeeper集群
设置SSH免密登陆两台NameNode之间的协调需要SSH登陆来实现,所以两台NameNode必须要配置好
进入master这台机器的的根目录
输入命令:ssh-keygen -t rsa
出现提示可以不理会 直接按几次回车键就行了,出现以下界面说明生成私钥id_rsa和公钥id_rsa.pub
生成的公钥
把生成的公钥id发送到 slave1、slave2、slave3、机器上
输入命令: ssh-copy-id slave1
slave1会要求你输入slave1这台机器上的密码
要求你输入slave1密码
密码输入正确后你会看到以下界面,它说已经添加了密钥,它叫你尝试登陆一下
叫你尝试登陆一下slave1
添加其他的slave2、slave3、slave4、standby-master、master也是同样的操作。(一共5台机器,包括目前本机)
在master完成以上操作之后,再到standby-master 重复以上的操作。(记得两个NameNode都要进行操作,重要的事再说一遍)。
配置Hadoop集群