之前自己搭建过Hadoop高可用(HA)。
最近自己整理了下也参考了些其他文章,方便自己之后再次使用,也方便大家在搭建时做一个参考。
自动HA节点有如下进程配置正确
实验环境配置如下:
hadoop01 namenode、datanode、nodemanager、journalnode、zookeeper(也就是QuorumPeerMain)
hadoop02 namenode、resourcemanager、datanode、nodemanager、journalnode、zookeeper(也就是QuorumPeerMain)
hadoop03 datanode、nodemanager、journalnode、zookeeper(也就是QuorumPeerMain)
执行步骤:
前提是已安装java环境,当前用户为root,统一系统时间 例如: date -s '日期时间'
(1)三台虚拟机主机名hadoop01 hadoop02 hadoop03
分别修改hosts文件 /etc/hosts 添加以下内容
x.x.x.x hadoop01
x.x.x.x hadoop02
x.x.x.x hadoop03
分别关闭防火墙:
chkconfig iptables off 将关闭防火墙命令设为开机启动项
service iptables stop 关闭防火墙
(2)三台虚拟机配置免登录
hadoop01:
ssh-keygen -t rsa 4个回车
ssh-copy-id -i hadoop01 如果没有ssh-copy-id命令 yum install openssh-clients*
ssh-copy-id -i hadoop02
ssh-copy-id -i hadoop03
hadoop02 hadoop03 分别重复hadoop01的步骤
(3)上传hadoop压缩包到hadoop01节点压缩
tar -zxvf hadoop-2.6.0.tar.gz -C /usr/local
配置hadoop环境变量(最后记住source文件) 可以通过hdfs来验证
export HADOOP_HOME=/usr/local/hadoop-2.6.0
export PATH=.:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
(4)修改7个配置文件,etc集群配置自动HA 基础上修改
修改对应主机名,例如crxy99 换成hadoop01
java环境变量和自己节点路径一致
具体配置文件可参考:
作者:一寸HUI
出处:https://www.cnblogs.com/zsql/
(5)上传配置文件到hadoop安装目录下的/etc/hadoop中
(6)将hadoop安装包拷贝到其他两个节点,并配置环境变量
scp -r hadoop-2.6.0 hadoop02:/usr/local
scp -r hadoop-2.6.0 hadoop03:/usr/local
分别配置 hadoop02 hadoop03的hadoop环境变量
(7)在hadoop01、hadoop02、hadoop03上搭建zookeeper集群,启动zk集群??–怎么弄?
三台都上传zookeeper-3.4.6.tar.gz
解压: tar -zxvf -C /usr/local
修改zookeeper conf目录里面的zoo_sample.cfg改为zoo.cfg
mv zoo_sample.cfg zoo.cfg
修改zoo.cfg
dataDir=/usr/local/zookeeper-3.4.6/data
即:
找到dataDir,修改为/usr/local/zookeeper-3.4.6/data
在最底下添加一行:
server.1=hadoop01:2888:3888
server.2=hadoop02:2888:3888
server.3=hadoop03:2888:3888
(8)创建myid
第一步:在三台上都执行
cd /usr/local/zookeeper-3.4.6/
mkdir data
在hadoop01上,vi /usr/local/zookeeper-3.4.6/data/myid 写上1保存退出
在hadoop02上,vi /usr/local/zookeeper-3.4.6/data/myid 写上2保存退出
在hadoop03上,vi /usr/local/zookeeper-3.4.6/data/myid 写上3保存退出
(9)启动zookeeper
zookeeper-3.4.6/bin/zkServer.sh start 三个都启动!! 然后jps有一个 QuorumPeerMain进程
(10)在三个节点都启动journalnode进程
hadoop-daemon.sh start journalnode
(11)格式化zk集群
在hadoop01上执行hdfs zkfc -formatZK
(12)格式化NameNode然后启动
在hadoop01上执行hdfs namenode -format
在hadoop01上执行hadoop-daemon.sh start namenode
在hadoop02上执行hdfs namenode -bootstrapStandby
在hadoop02上执行hadoop-daemon.sh start namenode
(13)启动datanode
在hadoop01上执行hadoop-daemons.sh start datanode
在hadoop02上启动start-yarn.sh 对比各个节点的进程和本文3-5行的进程是否一样
hadoop01 namenode、datanode、nodemanager、journalnode、zookeeper(也就是QuorumPeerMain)
hadoop02 namenode、resourcemanager、datanode、nodemanager、journalnode、zookeeper(也就是QuorumPeerMain)
hadoop03 datanode、nodemanager、journalnode、zookeeper(也就是QuorumPeerMain)
(14)在namenode节点启动ZKFC
在含有NameNode进程的hadoop01、hadoop02上 启动zkfc
执行命令hadoop-daemon.sh start zkfc jps看一下多了一个 DFSZKFailoverController进程!
(15)验证ha
网页看下hadoop01的50070和hadoop02的50070 杀掉活的(active)那一个!
看看standby状态的有没切换为active
重启杀掉的namenode,在看下状态时候自动变为standby
在被杀掉的节点执行hadoop-daemon.sh start namenode 重启namenode
之前自己安装过高可用集群,但是因为没有正确关机,后来再次启动时,竟然报错了~
(可选项)
怎么正确关机?
0. hadoop01、hadoop02 hadoop-daemon.sh stop zkfc
1. hadoop02上stop-yarn.sh
2. 主节点(active namenode所在节点)执行stop-dfs.sh
3. 三个节点都关闭journalnode进程,命令是hadoop-daemon.sh stop journalnode
(如果还有残存进程 kill -9 pid)
参考:
https://blog.csdn.net/tiankongbubian/article/details/107583679