温馨提示×

centos怎样配hdfs高可用

小樊
44
2026-09-12 08:14:32
栏目: 智能运维

下面以 CentOS 7/8 为例,说明如何配置 HDFS High Availability(HA)。这里采用 官方推荐的 QJM(Quorum Journal Manager)方式,不依赖 NFS。


一、环境准备

1. 主机规划(示例)

主机名 角色
nn1 NameNode(Active)
nn2 NameNode(Standby)
jn1 JournalNode
jn2 JournalNode
jn3 JournalNode
dn1~dnN DataNode

所有节点需:

  • CentOS 7/8
  • JDK 8+
  • 主机名可解析(/etc/hosts 或 DNS)
  • 时间同步(NTP)

二、基础配置

1. 安装 Hadoop

所有节点:

tar -zxvf hadoop-3.x.tar.gz -C /opt
export HADOOP_HOME=/opt/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

2. 配置 SSH 免密

NameNode 之间、NameNode 到 DataNode:

ssh-keygen
ssh-copy-id nn2
ssh-copy-id dn1

三、HDFS HA 核心配置

以下文件都在 $HADOOP_HOME/etc/hadoop/


1. core-site.xml

<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://mycluster</value>
  </property>

  <property>
    <name>hadoop.tmp.dir</name>
    <value>/data/hadoop/tmp</value>
  </property>
</configuration>

2. hdfs-site.xml

(1)NameService 名称

<property>
  <name>dfs.nameservices</name>
  <value>mycluster</value>
</property>

(2)NameNode ID

<property>
  <name>dfs.ha.namenodes.mycluster</name>
  <value>nn1,nn2</value>
</property>

(3)NameNode RPC / HTTP

<property>
  <name>dfs.namenode.rpc-address.mycluster.nn1</name>
  <value>nn1:8020</value>
</property>
<property>
  <name>dfs.namenode.rpc-address.mycluster.nn2</name>
  <value>nn2:8020</value>
</property>

<property>
  <name>dfs.namenode.http-address.mycluster.nn1</name>
  <value>nn1:9870</value>
</property>
<property>
  <name>dfs.namenode.http-address.mycluster.nn2</name>
  <value>nn2:9870</value>
</property>

(4)JournalNode 配置

<property>
  <name>dfs.namenode.shared.edits.dir</name>
  <value>qjournal://jn1:8485;jn2:8485;jn3:8485/mycluster</value>
</property>

<property>
  <name>dfs.journalnode.edits.dir</name>
  <value>/data/hadoop/journal</value>
</property>

(5)故障转移配置

<property>
  <name>dfs.client.failover.proxy.provider.mycluster</name>
  <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>

<property>
  <name>dfs.ha.fencing.methods</name>
  <value>sshfence</value>
</property>

<property>
  <name>dfs.ha.fencing.ssh.private-key-files</name>
  <value>/root/.ssh/id_rsa</value>
</property>

(6)自动故障转移(推荐)

<property>
  <name>dfs.ha.automatic-failover.enabled</name>
  <value>true</value>
</property>

3. workers

dn1
dn2
dn3

四、ZooKeeper 配置(自动 Failover 必需)

1. 安装 ZooKeeper(3 节点)

zkServer.sh start

2. hadoop-env.sh

export HADOOP_ZKFC_OPTS="-Dzookeeper.sasl.client=false"

五、初始化与启动

1. 启动 JournalNode

在 jn1/jn2/jn3:

hdfs --daemon start journalnode

2. 格式化 NameNode(仅第一次)

在 nn1:

hdfs namenode -format
hdfs zkfc -formatZK

3. 同步元数据到 nn2

在 nn2:

hdfs namenode -bootstrapStandby

4. 启动 HDFS

在 nn1:

start-dfs.sh

5. 验证

hdfs haadmin -getServiceState nn1
hdfs haadmin -getServiceState nn2

访问:

  • http://nn1:9870
  • http://nn2:9870

六、测试故障转移

hdfs haadmin -failover nn1 nn2

七、常见问题

  • 两个 NameNode 都是 Standby:ZKFC 未启动或 ZooKeeper 异常
  • JournalNode 不同步:检查 8485 端口
  • 脑裂:确保 fencing 配置正确

如果你需要:

  • Hadoop 3 具体版本配置
  • 使用 NFS 代替 QJM
  • 生产环境参数优化

可以告诉我你的集群规模和版本。

0 踩