目录
- 前言
- 一、Hadoop集群HA高可用概述
- 二、集群规模
- 三、配置zookeeper集群
- 1.解压zookeeper安装包
- 2.设置环境变量
- 3.配置zoo.cfg配置文件
- 4.分发到其他节点
- 5.修改myid 配置文件
- 6.启动并查看zookeeper状态
- 四、配置HA高可用
- 1.解压hadoop安装包
- 2.添加环境变量
- 3.修改配置文件
- 4.分发配置文件
- 5.启动JournalNode
- 5.1安装自动转移机制依赖fence 程序包
- 6.初始化namenode
- 6.1格式化zookeeper
- 6.2 启动集群
- 6.3查看进程
- 最终实现效果
- 五、故障转移检测
- 六、HA启动脚本
- 七、总结
前言
随着大数据技术的不断发展,Hadoop作为开源的大数据处理框架,已经广泛应用于各种场景中。然而,在大型生产环境中,Hadoop集群的稳定性和可用性显得尤为重要。为了保障Hadoop集群的高可用性(HA),我们需要采用一系列的技术和策略。本文将重点介绍Hadoop集群的HA高可用方案。
一、Hadoop集群HA高可用概述
Hadoop集群的HA高可用主要指的是在集群中的关键组件出现故障时,能够自动切换到其他节点继续提供服务,从而确保整个集群的稳定运行。
二、集群规模
Hadoop HA高可用集群规划 - 三节点(master, slave1, slave2)
组件 master slave1 slave2 描述 Hadoop NameNode 主节点 备节点 无 主备部署,共享存储同步元数据 SecondaryNameNode 主节点 无 无 辅助NameNode,定期合并fsimage和edits log ResourceManager 主节点 备节点 无 主备部署,实现资源管理和任务调度 DataNode 有 有 有 存储实际数据,参与数据块的读写操作 NodeManager 有 有 有 负责管理容器生命周期,与ResourceManager通信 三、配置zookeeper集群
1.解压zookeeper安装包
tar -zxvf zookeeper-3.4.6.tar.gz -C /usr/local/src
2.设置环境变量
位置:vi /.bash_profile
添加环境变量
export ZK_HOME=/usr/local/src/zookeeper export PATH=$PATH:$ZK_HOME/bin
3.配置zoo.cfg配置文件
先创建存放ZK的数据文件和配置文件的zkdata目录mkdir zkdata
配置zoo.cfg文件,在文件中添加下面内容
dataDir=/usr/local/src/zookeeper/zkdata server.1=master:2888:3888 server.2=slave1:2888:3888 server.3=slave2:2888:3888
4.分发到其他节点
scp -r zookeeper/ root@slave2:/usr/local/src
5.修改myid 配置文件
在zkdata目录中创建myid并修改
echo 1>myid (master) echo 2>myid (slave1) echo 3>myid (slave2)
—master
—slave1
—slave2
6.启动并查看zookeeper状态
位置:cd /usr/local/src/zookeeper/bin
启动:./zkServer.sh start
状态:./zkServer.sh status
----master
----Slave1
----Slave2
zookeeper配置完成!
四、配置HA高可用
1.解压hadoop安装包
tar -zxvf hadoop-3.2.2.tar.gz -C /usr/local/src
2.添加环境变量
export HADOOP_HOME=/usr/local/src/hadoop export PATH=$PATH:$HADOOP_HOME/bin
3.修改配置文件
(1)core-site.xml
fs.defaultFS hdfs://mycluster hadoop.tmp.dir /usr/loal/src/hadoop/data dfs.journalnode.edits.dir /usr/loal/src/hadoop/data/jn ha.zookeeper.quorum master:2181,slave1:2181,slave2:2181 (2)hdfs-site.xml
dfs.replication 3 dfs.nameservices mycluster dfs.ha.namenodes.mycluster nn1,nn2,nn3 dfs.namenode.rpc-address.mycluster.nn1 master:8020 dfs.namenode.rpc-address.mycluster.nn2 slave1:8020 dfs.namenode.rpc-address.mycluster.nn3 slave2:8020 dfs.namenode.http-address.mycluster.nn1 master:9870 dfs.namenode.http-address.mycluster.nn2 slave1:9870 dfs.namenode.http-address.mycluster.nn3 slave2:9870 dfs.namenode.shared.edits.dir qjournal://master:8485;slave1:8485;slave2:8485/mycluster dfs.client.failover.proxy.provider.mycluster org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider dfs.permissions.enable false dfs.ha.fencing.methods sshfence dfs.ha.fencing.ssh.private-key-files /root/.ssh/id_rsa dfs.ha.automatic-failover.enabled true (3) hadoop-env.sh
export JAVA_HOME=/usr/local/jdk export HDFS_NAMENODE_USER=root export HDFS_DATANODE_USER=root export HDFS_JOURNALNODE_USER=root export HDFS_ZKFC_USER=root
(4) workers
master slave1 salve2
4.分发配置文件
scp -r hdfs-site.xml root@slave2:/usr/local/src/hadoop/etc/hadoop
5.启动JournalNode
hdfs --daemon start journalnode
5.1安装自动转移机制依赖fence 程序包
yum -y install psmisc
如果不安装这个程序包,自动转移故障机制无法进行 fence。
其他的 Standby 状态的NameNode 不能自动切换为 Active状态。
6.初始化namenode
在初始化前要先启动三台节点的zookeeper,并关闭防火墙 systemctl stop firewalld
hdfs namenode -format
6.1格式化zookeeper
hdfs zkfc -formatZK
判断初始化是否成功:zkCli.sh
6.2 启动集群
mater上执行:(只需执行一次)
hdfs --daemon start namenode
slave1上执行:(只需执行一次)
hdfs namenode -bootstrapStandby
在mater上启动集群:
./start-dfs.sh
6.3查看进程
最终实现效果
如果遇到zkfc启动失败的情况先去关闭hadoop集群再重新格式化zookeeper最后重新启动hadoop集群
五、故障转移检测
kill -9 进程号 (这里的进程号就是namenode的进程号,如 kill -9 14607)
当杀掉第一台节点master后active状态会自动转移到第二台节点slave1上,被杀掉的节点页面便不可访问
六、HA启动脚本
#!/bin/bash if [ $# -lt 1 ]; then echo "No Args Input..." exit 1; fi case $1 in "start") echo "----------启动zookeeper----------" for i in master slave1 slave2; do echo "---------- zookeeper $i 启动 ------------" ssh $i "/usr/local/src/zookeeper/bin/zkServer.sh start" && echo "Zookeeper $i 启动成功" done echo "---------- 启动hdfs------------" ssh master "/usr/local/src/hadoop/sbin/start-dfs.sh" && echo "HDFS 启动成功" echo "---------- hadoop HA启动成功------------" ;; "stop") echo "----------关闭hdfs----------" ssh master "/usr/local/src/hadoop/sbin/stop-dfs.sh" && echo "HDFS 关闭成功" echo "----------关闭zookeeper----------" for i in master slave1 slave2; do echo "---------- zookeeper $i 停止 ------------" ssh $i "/usr/local/src/zookeeper/bin/zkServer.sh stop" && echo "Zookeeper $i 停止成功" done echo "---------- hadoop HA停止成功------------" ;; "status") echo "----------检查zookeeper状态----------" for i in master slave1 slave2; do echo "---------- zookeeper $i 状态 ------------" ssh $i "/usr/local/src/zookeeper/bin/zkServer.sh status" done ;; *) echo "Input Args Error" ;; esac
七、总结
Hadoop集群的HA高可用方案是保障集群稳定性和可用性的重要手段。通过合理配置NameNode、ResourceManager等关键组件的高可用策略,并结合共享存储、ZooKeeper等技术手段,我们可以有效地提高Hadoop集群的容错能力和服务水平。在实际应用中,我们需要根据集群的规模和业务需求来选择合适的HA高可用方案,并进行持续的监控和优化,以确保集群的稳定运行和高效处理大数据任务。