Hadoop NameNode 高可用 (High Availability) 实现解析https://developer.ibm.com/zh/articles/os-cn-hadoop-name-node/
实验目标:部署一个小型的HDFS HA(NameNode HA)分布式高可用集群 ,用于教学演示
环境要求: 虚拟机VirtualBox 操作系统 Centos7
hadoop版本 hadoop-2.6.0-cdh5.7.0 ZooKeeper版本 zookeeper-3.4.5-cdh5.7.0.tar.gz
前提实验:本实验紧接ZooKeeper集群部署实验,在Zookeeper实验完成的基础上继续进行HDFS HA(NameNode HA)部署演示
集群规划:
主机IP | 主机名 | 集群角色(运行的进程) |
---|---|---|
192.168.56.9 | Standby | NameNode(Standby) ,DFSZKFailoverController |
192.168.56.10 | master | NameNode(Active), DataNode, JournalNode, QuorumPeerMain,DFSZKFailoverController |
192.168.56.11 | slave1 | DataNode, JournalNode, QuorumPeerMain |
192.168.56.12 | slave2 | DataNode , JournalNode, QuorumPeerMain |
一 搭建HDFS HA(NameNode HA)高可用集群
实验步骤:
1)从ZooKeeper集群中的master主机复制一台新虚拟机,必须关机才能复制, 完成后启动新虚拟机(最好利用一台已有的虚拟机以节省时间)
2)在新建虚拟机自带界面登陆, 通过配置文件修改虚拟机IP地址为192.168.56.9
配置文件位置/etc/sysconfig/network-scripts/ifcfg-enp0s8,文件名和网络接口名称对应, 然后service network restart重启网络接口
3)用XSHELL远程登录新虚拟机,请注意VirtualBox主机网络管理器的虚拟网卡IP地址必须和CentOS一个网段
4)修改新建虚拟机的hostname
vi /etc/hostname 主机名修改为standby
新建虚拟机的主机名修改为standby ,修改后把当前的XSHELL登录会话重新连接一下,终端显示的主机名才会改变
5)检查环境变量并使之生效
在master, slave1,slave2三台主机上都要检查环境变量
vi /etc/profile
# jdk
export JAVA_HOME=/usr/local/java/jdk1.8
export PATH=$PATH:$JAVA_HOME/bin
# hadoop
export HADOOP_HOME=/usr/local/hadoop-2.6.0-cdh5.7.0
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
# zookeeper
export ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.5-cdh5.7.0
export PATH=$PATH:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf
执行命令source /etc/profile 让环境变量生效
6)依次修改standy,master,slave1,slave2的hosts文件
先在master主机的终端执行 vi /etc/hosts 修改hosts文件,前两行必须保留不要修改,删除掉多余的行,新增加5行
192.168.56.9 standby
192.168.56.10 master
192.168.56.11 slave1
192.168.56.12 slave2
再依次执行远程拷贝命令将hosts文件复制到另外3台主机:
scp /etc/hosts root@standby:/etc/
scp /etc/hosts root@slave1:/etc/
scp /etc/hosts root@slave2:/etc/
7)测试standy,master,slave1,slave2这4台主机之间的免密登陆,免密登录成功后,必须输入exit退出并返回原会话,以免搞混
8)创建jounalNode存放共享存储的目录
依次在master, slave1, slave2这三台主机创建目录:
先切换到/root/hdfs 目录 cd /root/hdfs
再执行命令mkdir journal 创建子目录/root/hdfs/journal
路径/root/hdfs/journal和配置文件hdfs-site.xml中的dfs.journalnode.edits.dir参数值相同
9)修改hadoop-env.sh文件
cd /usr/local/hadoop-2.6.0-cdh5.7.0/etc/hadoop
vi hadoop-env.sh
修改JAVA_HOME环境变量的值为java jdk的存放路径
# export JAVA_HOME=${JAVA_HOME}
export JAVA_HO