1. 环境准备
在Debian系统上实现Hadoop高可用(HA),需先完成基础环境配置:安装Java(建议使用Temurin 8+)、下载并解压Hadoop(如3.3.0+版本);规划集群角色(至少3个JournalNode、2个NameNode、2个ResourceManager、多个DataNode),确保节点间网络互通(关闭防火墙或开放必要端口,如8020、50070、2181等);安装ZooKeeper集群(至少3节点),用于协调NameNode状态和自动故障转移。
2. 配置ZooKeeper集群
ZooKeeper是Hadoop HA的核心协调组件,需在每个ZooKeeper节点上完成以下配置:
/etc/hadoop/conf/zoo.cfg,添加集群节点信息(server.X=节点IP:2888:3888,X为节点ID);/opt/module/zookeeper-3.4.6/zkData目录下创建myid文件,内容为对应节点ID(如node1的myid内容为1);zkServer.sh start),并通过zkServer.sh status验证集群状态(需有1个Leader和2个Follower)。3. 配置HDFS高可用(NameNode HA)
HDFS HA通过Active/Standby NameNode模式实现,核心配置如下:
core-site.xml:设置HDFS命名空间地址(fs.defaultFS=hdfs://cluster1,cluster1为命名服务ID)和ZooKeeper集群地址(ha.zookeeper.quorum=zk1:2181,zk2:2181,zk3:2181);hdfs-site.xml:
dfs.nameservices=cluster1,dfs.ha.namenodes.cluster1=namenode1,namenode2);dfs.namenode.rpc-address.cluster1.namenode1=namenode1:8020,dfs.namenode.http-address.cluster1.namenode1=namenode1:50070,同理配置namenode2);dfs.namenode.shared.edits.dir=qjournal://journalnode1:8485;journalnode2:8485;journalnode3:8485/cluster1);dfs.ha.automatic-failover.enabled=true);dfs.ha.fencing.methods=sshfence,dfs.ha.fencing.ssh.private-key-files=/home/user/.ssh/id_rsa,用于强制终止故障NameNode进程);hdfs namenode -format,初始化元数据;hadoop-daemons.sh start journalnode,启动日志同步服务;start-dfs.sh,启动所有NameNode、DataNode和JournalNode进程。4. 配置YARN高可用(ResourceManager HA)
YARN HA通过Active/Standby ResourceManager模式实现,核心配置如下:
yarn-site.xml:
yarn.resourcemanager.ha.enabled=true);yarn.resourcemanager.cluster-id=yarn1,yarn.resourcemanager.ha.rm-ids=rm1,rm2);yarn.resourcemanager.zk-address=zk1:2181,zk2:2181,zk3:2181);yarn.resourcemanager.rpc-address.rm1=rm1:8032,yarn.resourcemanager.http-address.rm1=rm1:8088,同理配置rm2);start-yarn.sh,启动所有ResourceManager和NodeManager进程。5. 配置数据备份策略
通过Hadoop的数据复制功能保障数据可靠性:
hdfs-site.xml中设置dfs.replication=3(默认3副本),确保数据块在多个DataNode上冗余存储;hdfs snapshot命令),备份关键目录(如/user、/data),便于故障恢复。6. 配置监控与告警系统
通过监控工具实时跟踪集群状态,及时发现故障:
hdfs dfsadmin -report查看DataNode状态,yarn node -list查看NodeManager状态);7. 验证高可用性
通过模拟故障测试自动故障转移功能:
hadoop-daemon.sh stop namenode),观察Standby NameNode是否自动切换为Active(通过hdfs haadmin -getServiceState nn1命令验证);yarn-daemon.sh stop resourcemanager),观察Standby ResourceManager是否自动切换为Active(通过yarn rmadmin -getServiceState rm1命令验证);hdfs dfs -put和hdfs dfs -get命令测试数据读写,确保服务连续性。