文章目录
环境声明
三台centos6虚拟机,使用zookeeper-3.4.7来管理hadoop-2.7.6集群,三台机器分别叫做hadoop01
,hadoop02
,hadoop03
,其中hadoop01
和hadoop02
是namenode
,集群之间可以免密互通,使用ssh
连接。(以下操作只要在hadoop01上进行即可)。
创建文件
在/root/bin
目录下创建三个.sh
文件,文件名及内容如下所示,将文件创建完后,在命令行分别输入
chmod 777 start_zk_hadoop.sh
chmod 777 stop_zk_hadoop.sh
chmod 777 jpsall.sh
为三个文件赋予权限,以后就可以直接输入文件名运行了。
三台机器启动zookeeper和hadoop
先启动三台机器的zookeeper,然后再启动hadoop集群的相关配置,最后查看状态
srart_zk_hadoop.sh
#!/bin/bash
echo -e "\n############ 启动三个节点的zookeeper ############"
for host in hadoop01 hadoop02 hadoop03
do
echo -e "\n================== $host ===================="
# 先使用连接三个主机,source /etc/profile加载环境变量,然后在每台主机分别启动zookeeper,
# 其中/home/software/zookeeper-3.4.7是zk的文件目录,需根据实际情况修改
ssh $host "source /etc/profile; /home/software/zookeeper-3.4.7/bin/zkServer.sh start"
done
echo -e "\n############ 三个节点的zookper状态 ##############"
for host in hadoop01 hadoop02 hadoop03
do
echo -e "\n================== $host ===================="
ssh $host "/home/software/zookeeper-3.4.7/bin/zkServer.sh status"
done
echo -e "\n############## 启动三个节点的Hadoop #############"
# 先启动hadoop01作为namenode,启动dfs和yarn,并启动zk的相关服务
echo -e "\n=============== hadoop01 =================="
ssh hadoop01 "source /etc/profile; start-dfs.sh; start-yarn.sh; hadoop-daemon.sh start journalnode; yarn-daemon.sh start resourcemanager"
# 然后分别启动hadoop02和hadoop03的剩余组件
echo -e "\n=============== hadoop02 =================="
ssh hadoop02 "source /etc/profile; start-yarn.sh; yarn-daemon.sh start resourcemanager"
echo -e "\n=============== hadoop03 =================="
ssh hadoop03 "source /etc/profile; start-yarn.sh; yarn-daemon.sh start resourcemanager"
# 由于很多时候需要进行对namenode的操作,所以需要知道哪个namenode是处于active状态的
# 本环境中的nn1和nn2是hadoop配置中的两个namenode
echo -e "\n########### 查看avtice和standby节点 #############"
echo -e "\n================ hadoop01 ==================="
hdfs haadmin -getServiceState nn1
echo -e "================ hadoop02 ==================="
hdfs haadmin -getServiceState nn2
主备切换
命令切换
如果对于namenode不满意,如实验需要nn1
(namenode1)是active
节点,而启动完却是nn2
(namenode2)作为active
节点,可在命令行中输入
hdfs haadmin -transitionToStandby --forcemanual nn2
将nn2
换成standby
状态,再输入
hdfs haadmin -transitionToActive --forcemanual nn1
将nn1
换成active
状态。最后输入
hdfs haadmin -getServiceState nn1
查看该节点的namenode状态。
ZKFC切换
也可以通过使用zookeeper的Failover Controller故障转移机制来实现,即使用jps查询active
节点的namenode进程号,在命令行中输入
kill -9 进程号
将进程杀死,zookeeper会自动在standby
的节点中选出一个新的节点作为active
节点。然后再在该节点输入
hadoop-daemon.sh start namenode
启动该节点的namenode作为standby
节点,以此实现主备节点的切换。
关闭hadoop和zookeeper
先将三台机器的hadoop都关闭,再关闭三台机器的zookpeer服务。
stop_zk_hadoop.sh
#!/bin/bash
echo -e "\n############## 关闭三个节点的Hadoop #############"
# 先关闭hadoop01的一些服务
echo -e "\n============ hadoop01 ==============="
ssh hadoop01 "source /etc/profile; stop-dfs.sh; stop-yarn.sh"
# 分别关闭hadoop02和hadoop03的剩余服务
echo -e "\n============ hadoop02 ==============="
ssh hadoop02 "source /etc/profile; stop-yarn.sh"
echo -e "\n============ hadoop03 ==============="
ssh hadoop03 "source /etc/profile; stop-yarn.sh"
echo -e "\n############ 关闭三个节点的zookeeper ############"
for host in hadoop01 hadoop02 hadoop03
do
echo -e "\n==================== $host ======================"
ssh $host "source /etc/profile; /home/software/zookeeper-3.4.7/bin/zkServer.sh stop; jps"
done
查看三台机器的jps进程
jpsall.sh
#!/bin/bash
for host in hadoop01 hadoop02 hadoop03
do
echo "============== $host ==============="
ssh $host "source /etc/profile; jps"
done
可以将三台机器的jps进程全部打印出来。