编写一个具有3个namenode 的HDFS联邦的hdfs-site.xml ,core-site.xml 的配置文件

一个具有 3 个 NameNode 的 HDFS 联邦集群的配置文件。
#集群环境假设
3个 NameNode: nn1.cluster.com, nn2.cluster.com, nn3.cluster.com
多个 DataNode: dn1.cluster.com, dn2.cluster.com, ... (共享存储)
集群逻辑名称: myfederation
JournalNode 节点 (用于每个命名服务的高可用): jn1.cluster.com, jn2.cluster.com, jn3.cluster.com
ZooKeeper 节点: zk1.cluster.com, zk2.cluster.com, zk3.cluster.com

1. hdfs-site.xml 配置
这个文件定义了三个独立的命名服务,每个都有自己独立的命名空间。

#hdfs-site.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>
    <description>定义三个独立的命名服务</description>
  </property>

  <!-- 定义每个命名服务的路由(在core-site.xml中通过ViewFS使用) -->
  <property>
    <name>dfs.internal.nameservices</name>
    <value>ns1,ns2,ns3</value>
  </property>

  <!-- ============================================= -->
  <!--         第一个命名服务 (ns1) 配置             -->
  <!-- ============================================= -->
  
  <!-- ns1 的 NameNode 列表 -->
  <property>
    <name>dfs.ha.namenodes.ns1</name>
    <value>nn1,nn2</value>
    <description>ns1命名服务的两个NameNode(HA对)</description>
  </property>

  <!-- ns1 的 RPC 地址 -->
  <property>
    <name>dfs.namenode.rpc-address.ns1.nn1</name>
    <value>nn1.cluster.com:8020</value>
  </property>
  <property>
    <name>dfs.namenode.rpc-address.ns1.nn2</name>
    <value>nn2.cluster.com:8020</value>
  </property>

  <!-- ns1 的 HTTP 地址 -->
  <property>
    <name>dfs.namenode.http-address.ns1.nn1</name>
    <value>nn1.cluster.com:9870</value>
  </property>
  <property>
    <name>dfs.namenode.http-address.ns1.nn2</name>
    <value>nn2.cluster.com:9870</value>
  </property>

  <!-- ns1 的共享编辑日志存储(JournalNodes) -->
  <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>

  <!-- ns1 的故障转移代理 -->
  <property>
    <name>dfs.client.failover.proxy.provider.ns1</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
  </property>

  <!-- ============================================= -->
  <!--         第二个命名服务 (ns2) 配置             -->
  <!-- ============================================= -->
  
  <property>
    <name>dfs.ha.namenodes.ns2</name>
    <value>nn1,nn2</value>
  </property>

  <property>
    <name>dfs.namenode.rpc-address.ns2.nn1</name>
    <value>nn1.cluster.com:8022</value>
    <description>注意:使用不同端口避免冲突</description>
  </property>
  <property>
    <name>dfs.namenode.rpc-address.ns2.nn2</name>
    <value>nn2.cluster.com:8022</value>
  </property>

  <property>
    <name>dfs.namenode.http-address.ns2.nn1</name>
    <value>nn1.cluster.com:9871</value>
  </property>
  <property>
    <name>dfs.namenode.http-address.ns2.nn2</name>
    <value>nn2.cluster.com:9871</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>

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

  <!-- ============================================= -->
  <!--         第三个命名服务 (ns3) 配置             -->
  <!-- ============================================= -->
  
  <property>
    <name>dfs.ha.namenodes.ns3</name>
    <value>nn1,nn2</value>
  </property>

  <property>
    <name>dfs.namenode.rpc-address.ns3.nn1</name>
    <value>nn1.cluster.com:8024</value>
  </property>
  <property>
    <name>dfs.namenode.rpc-address.ns3.nn2</name>
    <value>nn2.cluster.com:8024</value>
  </property>

  <property>
    <name>dfs.namenode.http-address.ns3.nn1</name>
    <value>nn1.cluster.com:9872</value>
  </property>
  <property>
    <name>dfs.namenode.http-address.ns3.nn2</name>
    <value>nn2.cluster.com:9872</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.client.failover.proxy.provider.ns3</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
  </property>

  <!-- ============================================= -->
  <!--         JournalNode 配置                      -->
  <!-- ============================================= -->
  
  <property>
    <name>dfs.journalnode.edits.dir</name>
    <value>/data/hadoop/journal</value>
    <description>JournalNode 数据存储目录</description>
  </property>

  <!-- ============================================= -->
  <!--         DataNode 配置(共享存储)             -->
  <!-- ============================================= -->
  
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>/data/hadoop/datanode</value>
  </property>

  <!-- DataNode 需要向所有 NameNode 报告 -->
  <property>
    <name>dfs.datanode.address</name>
    <value>0.0.0.0:9866</value>
  </property>

  <property>
    <name>dfs.datanode.http.address</name>
    <value>0.0.0.0:9864</value>
  </property>

  <property>
    <name>dfs.datanode.ipc.address</name>
    <value>0.0.0.0:9867</value>
  </property>

  <!-- ============================================= -->
  <!--         HA 自动故障转移配置                   -->
  <!-- ============================================= -->
  
  <property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
    <description>启用自动故障转移</description>
  </property>

  <property>
    <name>ha.zookeeper.quorum</name>
    <value>zk1.cluster.com:2181,zk2.cluster.com:2181,zk3.cluster.com:2181</value>
    <description>ZooKeeper 集群地址</description>
  </property>

  <!-- ============================================= -->
  <!--         其他重要配置                          -->
  <!-- ============================================= -->
  
  <property>
    <name>dfs.replication</name>
    <value>3</value>
    <description>副本因子</description>
  </property>

  <property>
    <name>dfs.blocksize</name>
    <value>134217728</value>
    <description>块大小 128MB</description>
  </property>

  <property>
    <name>dfs.namenode.name.dir</name>
    <value>file:///data/hadoop/namenode</value>
    <description>NameNode 元数据存储目录</description>
  </property>

  <property>
    <name>dfs.permissions.enabled</name>
    <value>true</value>
    <description>启用权限检查</description>
  </property>

</configuration>

2. core-site.xml 配置
这个文件配置客户端如何访问联邦集群,使用 ViewFS 提供统一的命名空间视图。

# core-site.xml 
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>

  <!-- ============================================= -->
  <!--         联邦集群全局配置                      -->
  <!-- ============================================= -->
  
  <!-- 使用 ViewFS 作为默认文件系统 -->
  <property>
    <name>fs.defaultFS</name>
    <value>viewfs://myfederation/</value>
    <description>使用 ViewFS 提供统一的联邦视图</description>
  </property>

  <!-- ============================================= -->
  <!--         ViewFS 挂载点配置                    -->
  <!-- ============================================= -->
  
  <!-- 定义联邦集群的挂载表 -->
  <property>
    <name>fs.viewfs.mounttable.myfederation.link./user</name>
    <value>hdfs://ns1/user</value>
    <description>将 /user 目录映射到 ns1 命名服务</description>
  </property>

  <property>
    <name>fs.viewfs.mounttable.myfederation.link./data</name>
    <value>hdfs://ns2/data</value>
    <description>将 /data 目录映射到 ns2 命名服务</description>
  </property>

  <property>
    <name>fs.viewfs.mounttable.myfederation.link./tmp</name>
    <value>hdfs://ns3/tmp</value>
    <description>将 /tmp 目录映射到 ns3 命名服务</description>
  </property>

  <property>
    <name>fs.viewfs.mounttable.myfederation.link./apps</name>
    <value>hdfs://ns1/apps</value>
    <description>将 /apps 目录映射到 ns1 命名服务</description>
  </property>

  <property>
    <name>fs.viewfs.mounttable.myfederation.link./warehouse</name>
    <value>hdfs://ns2/warehouse</value>
    <description>将数据仓库目录映射到 ns2 命名服务</description>
  </property>

  <!-- ============================================= -->
  <!--         Hadoop 通用配置                      -->
  <!-- ============================================= -->
  
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/data/hadoop/tmp</value>
    <description>Hadoop 临时目录</description>
  </property>

  <property>
    <name>hadoop.proxyuser.hdfs.groups</name>
    <value>*</value>
    <description>允许 HDFS 用户代理所有组</description>
  </property>

  <property>
    <name>hadoop.proxyuser.hdfs.hosts</name>
    <value>*</value>
    <description>允许 HDFS 用户从所有主机代理</description>
  </property>

  <!-- ============================================= -->
  <!--         I/O 配置                             -->
  <!-- ============================================= -->
  
  <property>
    <name>io.file.buffer.size</name>
    <value>131072</value>
    <description>I/O 缓冲区大小</description>
  </property>

</configuration>

3. 部署说明和初始化步骤
部署前准备
在所有节点创建目录:

bash
# 在 NameNode 节点
sudo mkdir -p /data/hadoop/namenode
sudo mkdir -p /data/hadoop/tmp

# 在 JournalNode 节点  
sudo mkdir -p /data/hadoop/journal

# 在 DataNode 节点
sudo mkdir -p /data/hadoop/datanode
sudo mkdir -p /data/hadoop/tmp

# 设置权限
sudo chown -R hdfs:hadoop /data/hadoop
sudo chmod -R 755 /data/hadoop
配置主机名解析 (/etc/hosts 或 DNS):

text
192.168.1.10 nn1.cluster.com
192.168.1.11 nn2.cluster.com
192.168.1.12 nn3.cluster.com
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 zk1.cluster.com
192.168.1.31 zk2.cluster.com
192.168.1.32 zk3.cluster.com
192.168.1.100 dn1.cluster.com
192.168.1.101 dn2.cluster.com

#初始化步骤
首先启动 JournalNodes:

bash
# 在所有 JournalNode 节点上
hdfs --daemon start journalnode
格式化并启动第一个命名服务 (ns1):

bash
# 在 nn1.cluster.com 上
hdfs namenode -format -clusterId myfederation
hdfs zkfc -formatZK -force  # 在 ZK 中初始化 HA 状态
hdfs --daemon start namenode

# 在 nn2.cluster.com 上 (ns1 的备用节点)
hdfs namenode -bootstrapStandby
hdfs --daemon start namenode

#初始化其他命名服务:
bash
# 在 nn1.cluster.com 上初始化 ns2
hdfs namenode -initializeSharedEdits -clusterId myfederation -force -nonInteractive
# 在 nn2.cluster.com 上初始化 ns2 备用
hdfs namenode -bootstrapStandby
# 重复上述步骤初始化 ns3


#启动所有服务:
bash
# 启动所有 NameNode 的 ZKFC
hdfs --daemon start zkfc

# 启动所有 DataNode
hdfs --daemon start datanode
验证联邦状态:

bash
# 查看联邦状态
hdfs dfsadmin -report

# 测试 ViewFS 挂载
hdfs dfs -ls /
hdfs dfs -ls /user
hdfs dfs -ls /data
这个配置创建了一个完整的 HDFS 联邦集群,具有 3 个独立的命名空间,每个命名空间都有高可用性保障,
并通过 ViewFS 为客户端提供统一的访问入口。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值