免密登录:确保所有节点间 SSH 免密登录正常,否则故障转移会失败。
路径一致性:所有节点的 Hadoop 安装路径、数据目录需完全一致。
端口冲突:检查 9820、9870、8485 等端口是否被占用。
ZooKeeper 集群:确保 ZK 集群稳定运行,至少 3 个节点避免脑裂。
节点 | 角色 | 软件依赖 |
---|---|---|
bigdata01 | Namenode1、JournalNode、ZooKeeper | Hadoop、JDK、ZooKeeper |
bigdata02 | Namenode2、JournalNode、ZooKeeper | Hadoop、JDK、ZooKeeper |
bigdata03 | JournalNode、ZooKeeper、DataNode | Hadoop、JDK、ZooKeeper |
重要:先对三台服务器拍摄快照,以便搭建失败时快速恢复!
目标:确保 bigdata01 和 bigdata02 可免密登录所有节点(包括自身)。
操作:
# 在bigdata02节点生成密钥对
ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
# 分发公钥到所有节点(包括bigdata01、bigdata02、bigdata03)
ssh-copy-id bigdata01
ssh-copy-id bigdata02
ssh-copy-id bigdata03
作用:提供killall
命令,用于 ZKFC 远程杀死假死的 Namenode 进程。
操作:通过 xcall 脚本在所有节点安装(bigdata01 已配置 xcall):
xcall.sh yum install -y psmisc
# 检查JDK安装(所有节点)
java -version
# 检查ZooKeeper状态(所有节点)
zkServer.sh status
# 停止集群
stop-all.sh
# 删除数据和日志目录(所有节点)
xcall.sh rm -rf /opt/installs/hadoop/tmp/ /opt/installs/hadoop/logs/
路径:/opt/installs/hadoop/etc/hadoop/hadoop-env.sh
内容:
export JAVA_HOME=/opt/installs/jdk/
export HDFS_NAMENODE_USER=root
# 其他服务用户配置(如Datanode、ZKFC等)
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
export HDFS_JOURNALNODE_USER=root
export HDFS_ZKFC_USER=root
同步配置:
xsync.sh hadoop-env.sh # 同步到bigdata02和bigdata03
路径:/opt/installs/hadoop/etc/hadoop/core-site.xml
内容:
hadoop.tmp.dir
/opt/installs/hadoop/tmp
fs.defaultFS
hdfs://hdfs-cluster
ha.zookeeper.quorum
bigdata01:2181,bigdata02:2181,bigdata03:2181
路径:/opt/installs/hadoop/etc/hadoop/hdfs-site.xml
内容:
dfs.replication
3
dfs.nameservices
hdfs-cluster
dfs.ha.namenodes.hdfs-cluster
nn1,nn2
dfs.namenode.rpc-address.hdfs-cluster.nn1
bigdata01:9820
dfs.namenode.http-address.hdfs-cluster.nn1
bigdata01:9870
dfs.namenode.rpc-address.hdfs-cluster.nn2
bigdata02:9820
dfs.namenode.http-address.hdfs-cluster.nn2
bigdata02:9870
dfs.journalnode.edits.dir
/opt/installs/journalnode/data/
dfs.namenode.shared.edits.dir
qjournal://bigdata01:8485;bigdata02:8485;bigdata03:8485/hdfs-cluster
dfs.ha.automatic-failover.enabled
true
dfs.client.failover.proxy.provider.hdfs-cluster
org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
dfs.ha.fencing.methods
sshfence
dfs.ha.fencing.ssh.private-key-files
/root/.ssh/id_rsa
dfs.webhdfs.enabled
true
确保/opt/installs/hadoop/etc/hadoop/workers
包含所有 DataNode 节点(如 bigdata03)。
xsync.sh core-site.xml hdfs-site.xml # 同步到bigdata02和bigdata03
zk.sh start # 所有节点启动ZK(若已配置脚本)
在 bigdata01 执行:
hdfs zkfc -formatZK
hdfs --daemon start journalnode
在 bigdata01 执行:
hdfs namenode -format
start-dfs.sh # 自动启动Namenode、DataNode、JournalNode
# 引导Standby节点同步元数据
hdfs namenode -bootstrapStandby
# 启动bigdata02的Namenode
hadoop-daemon.sh start namenode
Active 节点:http://bigdata01:9870
Standby 节点:http://bigdata02:9870
# 在任意节点执行
hdfs haadmin -getServiceState nn1 # 查看nn1状态(active/standby)
hdfs haadmin -getServiceState nn2 # 查看nn2状态
hadoop-daemon.sh stop namenode # 在bigdata01执行