1. 修正的 hdfs-site.xml - 每个 NameNode 独立配置
xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- ============================================= -->
<!-- 联邦集群全局配置 -->
<!-- ============================================= -->
<property>
<name>dfs.nameservices</name>
<value>ns1,ns2,ns3</value>
</property>
<!-- ============================================= -->
<!-- 第一个命名服务 (ns1) 配置 -->
<!-- ============================================= -->
<!-- ns1 使用独立的节点 ns1.nn1.cluster.com -->
<property>
<name>dfs.ha.namenodes.ns1</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.ns1.nn1</name>
<value>ns1.nn1.cluster.com:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.ns1.nn2</name>
<value>ns1.nn2.cluster.com:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.ns1.nn1</name>
<value>ns1.nn1.cluster.com:9870</value>
</property>
<property>
<name>dfs.namenode.http-address.ns1.nn2</name>
<value>ns1.nn2.cluster.com:9870</value>
</property>
<!-- ns1 的独立元数据目录 -->
<property>
<name>dfs.namenode.name.dir.ns1</name>
<value>file:///data/hadoop/namenode/ns1</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir.ns1</name>
<value>qjournal://jn1.cluster.com:8485;jn2.cluster.com:8485;jn3.cluster.com:8485/ns1</value>
</property>
<!-- ============================================= -->
<!-- 第二个命名服务 (ns2) 配置 -->
<!-- ============================================= -->
<!-- ns2 使用独立的节点 ns2.nn1.cluster.com -->
<property>
<name>dfs.ha.namenodes.ns2</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.ns2.nn1</name>
<value>ns2.nn1.cluster.com:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.ns2.nn2</name>
<value>ns2.nn2.cluster.com:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.ns2.nn1</name>
<value>ns2.nn1.cluster.com:9870</value>
</property>
<property>
<name>dfs.namenode.http-address.ns2.nn2</name>
<value>ns2.nn2.cluster.com:9870</value>
</property>
<!-- ns2 的独立元数据目录 -->
<property>
<name>dfs.namenode.name.dir.ns2</name>
<value>file:///data/hadoop/namenode/ns2</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir.ns2</name>
<value>qjournal://jn1.cluster.com:8485;jn2.cluster.com:8485;jn3.cluster.com:8485/ns2</value>
</property>
<!-- ============================================= -->
<!-- 第三个命名服务 (ns3) 配置 -->
<!-- ============================================= -->
<!-- ns3 使用独立的节点 ns3.nn1.cluster.com -->
<property>
<name>dfs.ha.namenodes.ns3</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.ns3.nn1</name>
<value>ns3.nn1.cluster.com:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.ns3.nn2</name>
<value>ns3.nn2.cluster.com:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.ns3.nn1</name>
<value>ns3.nn1.cluster.com:9870</value>
</property>
<property>
<name>dfs.namenode.http-address.ns3.nn2</name>
<value>ns3.nn2.cluster.com:9870</value>
</property>
<!-- ns3 的独立元数据目录 -->
<property>
<name>dfs.namenode.name.dir.ns3</name>
<value>file:///data/hadoop/namenode/ns3</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir.ns3</name>
<value>qjournal://jn1.cluster.com:8485;jn2.cluster.com:8485;jn3.cluster.com:8485/ns3</value>
</property>
<!-- ============================================= -->
<!-- 其他共享配置 -->
<!-- ============================================= -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/data/hadoop/journal</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/data/hadoop/datanode</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
</configuration>
2. 修正的 /etc/hosts 或 DNS 配置
text
# NameNode 节点 - 每个命名服务使用独立的主机名
192.168.1.10 ns1.nn1.cluster.com
192.168.1.11 ns1.nn2.cluster.com
192.168.1.12 ns2.nn1.cluster.com
192.168.1.13 ns2.nn2.cluster.com
192.168.1.14 ns3.nn1.cluster.com
192.168.1.15 ns3.nn2.cluster.com
# JournalNode 和 DataNode 节点
192.168.1.20 jn1.cluster.com
192.168.1.21 jn2.cluster.com
192.168.1.22 jn3.cluster.com
192.168.1.30 dn1.cluster.com
192.168.1.31 dn2.cluster.com
正确的启动方式
方案一:为每个节点准备独立的配置文件(推荐)
为每个 NameNode 节点创建专属配置目录:
bash
# 为 ns1.nn1.cluster.com 创建配置
mkdir -p /etc/hadoop/ns1-nn1
cp /etc/hadoop/core-site.xml /etc/hadoop/ns1-nn1/
cp /etc/hadoop/hdfs-site.xml /etc/hadoop/ns1-nn1/
# 修改 ns1-nn1 的 hdfs-site.xml,只保留 ns1 相关配置
# 删除 ns2 和 ns3 的配置节
# 启动特定节点的 NameNode
HADOOP_CONF_DIR=/etc/hadoop/ns1-nn1 hdfs --daemon start namenode
方案二:使用角色特定的启动脚本
创建启动脚本 /usr/local/bin/start-namenode-ns1.sh:
bash
#!/bin/bash
# 启动 ns1 的 NameNode
export HADOOP_CONF_DIR=/etc/hadoop/ns1-config
export HADOOP_LOG_DIR=/var/log/hadoop/ns1
export HADOOP_PID_DIR=/var/run/hadoop/ns1
# 创建目录
mkdir -p $HADOOP_LOG_DIR $HADOOP_PID_DIR
# 启动 NameNode
hdfs --daemon start namenode
echo "NameNode ns1 started with PID: $(cat $HADOOP_PID_DIR/hadoop-*-namenode.pid)"
方案三:使用服务管理(systemd)
创建 systemd 服务文件 /etc/systemd/system/hadoop-namenode-ns1.service:
ini
[Unit]
Description=Hadoop NameNode NS1
After=network.target
[Service]
Type=forking
User=hdfs
Group=hadoop
Environment=HADOOP_CONF_DIR=/etc/hadoop/ns1-config
Environment=HADOOP_LOG_DIR=/var/log/hadoop/ns1
Environment=HADOOP_PID_DIR=/var/run/hadoop/ns1
ExecStart=/opt/hadoop/bin/hdfs --daemon start namenode
ExecStop=/opt/hadoop/bin/hdfs --daemon stop namenode
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
使用 systemd 管理:
bash
systemctl start hadoop-namenode-ns1
systemctl start hadoop-namenode-ns2
systemctl start hadoop-namenode-ns3
验证和监控
检查进程状态
bash
# 检查每个 NameNode 进程
ps aux | grep namenode
# 检查每个 NameNode 的端口监听
netstat -tlnp | grep 9870
netstat -tlnp | grep 8020
# 检查每个命名服务的状态
hdfs dfsadmin -report -service ns1
hdfs dfsadmin -report -service ns2
hdfs dfsadmin -report -service ns3
验证联邦配置
bash
# 查看所有命名服务
hdfs getconf -namenodes
# 测试 ViewFS 挂载
hdfs dfs -ls viewfs://myfederation/
hdfs dfs -ls viewfs://myfederation/user
hdfs dfs -ls viewfs://myfederation/data
总结
关键修正点:
独立主机名:每个 NameNode 使用不同的主机名
独立配置目录:为每个 NameNode 准备专属配置
独立进程管理:使用不同的 systemd 服务或启动脚本
独立日志和PID目录:避免文件冲突
正确的架构应该是:
ns1.nn1.cluster.com + ns1.nn2.cluster.com (ns1 的 HA 对)
ns2.nn1.cluster.com + ns2.nn2.cluster.com (ns2 的 HA 对)
ns3.nn1.cluster.com + ns3.nn2.cluster.com (ns3 的 HA 对)
这样每个 NameNode 都可以独立启动和管理,不会产生冲突。感谢您指出这个重要问题!
namenode每个节点独立的联邦架构
最新推荐文章于 2025-11-23 20:44:55 发布
836

被折叠的 条评论
为什么被折叠?



