HDFS高可用性(HA)配置指南
HDFS高可用性通过双NameNode(Active/Standby)、JournalNode(元数据同步)、**ZooKeeper(故障转移协调)**等组件实现,确保NameNode故障时快速切换,保障服务连续性。以下是详细配置步骤:
/opt/hadoop/journaldata),在NameNode节点创建本地元数据目录(如/opt/hadoop/namenodedata)。JournalNode负责存储NameNode的编辑日志(edits log),确保双NameNode元数据一致。
hdfs-site.xml(所有JournalNode节点):<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/hadoop/journaldata</value>
</property>
hadoop-daemon.sh start journalnode
# 或使用start-dfs.sh(若已集成到Hadoop启动脚本)
通过jps命令检查是否启动成功(显示JournalNode进程)。hdfs-site.xml(所有NameNode节点)配置双NameNode的逻辑名称、RPC/HTTP地址、共享编辑日志目录及故障转移相关参数:
<!-- 指定HDFS集群逻辑名称 -->
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<!-- 定义NameNode列表(nn1为主,nn2为备) -->
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<!-- 配置Active NameNode的RPC地址 -->
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>namenode1:8020</value>
</property>
<!-- 配置Standby NameNode的RPC地址 -->
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>namenode2:8020</value>
</property>
<!-- 配置Active NameNode的HTTP地址(Web UI) -->
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>namenode1:50070</value>
</property>
<!-- 配置Standby NameNode的HTTP地址 -->
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>namenode2:50070</value>
</property>
<!-- 指定JournalNode集群地址(用于元数据同步) -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://namenode1:8485;namenode2:8485;namenode3:8485/mycluster</value>
</property>
<!-- 客户端故障转移代理(自动选择Active NameNode) -->
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 隔离机制(防止脑裂):通过SSH杀死Standby进程 -->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<!-- SSH私钥路径(用于隔离机制) -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>
<!-- 启用自动故障转移 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
core-site.xml(所有节点)配置HDFS默认文件系统地址(指向集群逻辑名称):
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
将hdfs-site.xml和core-site.xml复制到所有NameNode、DataNode、JournalNode节点的$HADOOP_HOME/etc/hadoop/目录下,确保配置一致。
namenode1(Active NameNode)上执行格式化命令(仅第一次启动时需要):hdfs namenode -format
namenode1上启动NameNode服务:hadoop-daemon.sh start namenode
# 或使用start-dfs.sh(若已集成)
namenode2(Standby NameNode)上执行以下命令,同步Active NameNode的元数据:hdfs namenode -bootstrapStandby
namenode2上启动NameNode服务。hadoop-daemon.sh start datanode或start-dfs.sh)。live状态:hdfs dfsadmin -report
http://namenode1:50070(Active NameNode Web UI),进入“JournalNodes”页面,确认所有JournalNode均同步正常。namenode1上的NameNode服务),等待10-30秒后,访问http://namenode2:50070,确认Standby NameNode已切换为Active状态。hdfs dfs -ls /命令,验证是否能正常访问HDFS(自动连接到Active NameNode)。dfs.ha.fencing.methods需配置有效的隔离方式(如sshfence),防止脑裂(多个Active NameNode同时处理请求)。/opt/hadoop/journaldata)和NameNode本地元数据目录(如/opt/hadoop/namenodedata),防止数据丢失。