1. 首页 > Hadoop教程 > 正文

大数据教程FG010-HDFS联邦Federation部署实战

内容简介:本文详细介绍HDFS联邦Federation部署实战,包括Federation架构原理、多命名空间配置、ViewFS使用、Federation运维管理等核心内容。风哥教程参考Hadoop官方文档HDFS Federation、ViewFS Guide等内容。

目录大纲

Part01-基础概念与理论知识
  1.1 HDFS Federation架构原理
  1.2 Federation解决的问题
  1.3 ViewFS原理说明
Part02-生产环境规划与建议
  2.1 Federation集群规划
  2.2 多命名空间设计
  2.3 Federation网络规划
Part03-生产环境项目实施方案
  3.1 多NameNode配置
  3.2 Federation集群部署
  3.3 ViewFS配置与使用
  3.4 Federation集群验证
Part04-生产案例与实战讲解
  4.1 多业务线隔离案例
  4.2 Federation扩容案例
  4.3 Federation运维案例
Part05-风哥经验总结与分享
  5.1 Federation最佳实践
  5.2 Federation常见问题解决

Part01-基础概念与理论知识

1.1 HDFS Federation架构原理

HDFS Federation(联邦)是为了解决单NameNode扩展性限制而设计的架构。更多视频教程www.fgedu.net.cn 在Federation架构中,多个NameNode分别管理不同的命名空间,共同对外提供服务,实现水平扩展。

风哥提示:Federation允许多个NameNode同时工作,每个NameNode管理独立的命名空间,互不干扰,提高集群整体扩展性。

1.2 Federation解决的问题

单NameNode架构存在扩展性限制,主要表现在:学习交流加群风哥微信: itpux-com

单NameNode限制:
– 内存限制:NameNode元数据存储在内存中,单机内存有限
– 性能瓶颈:所有请求都由单个NameNode处理
– 隔离性差:不同业务的元数据混合存储
– 扩展困难:无法通过增加NameNode提升容量

1.3 ViewFS原理说明

ViewFS是Federation架构中的关键组件,提供统一的文件系统视图。from bigdata视频:www.itpux.com ViewFS将多个命名空间映射到统一的目录结构,对用户透明。

ViewFS核心功能:
– 提供统一的命名空间视图
– 将不同目录路由到不同的NameNode
– 对应用程序透明,无需修改代码
– 支持动态添加和删除命名空间

Part02-生产环境规划与建议

2.1 Federation集群规划

Federation集群规划需要考虑业务隔离、负载均衡、高可用等因素。更多学习教程公众号风哥教程itpux_com

# 查看集群规划
cat /bigdata/app/hadoop/etc/hadoop/workers

# DataNode节点
fgedu01.net.cn
fgedu02.net.cn
fgedu03.net.cn
fgedu04.net.cn
fgedu05.net.cn
fgedu06.net.cn

2.2 多命名空间设计

多命名空间设计需要根据业务特点进行划分。学习交流加群风哥QQ113257174

命名空间划分建议:
– 按业务线划分:不同业务使用独立命名空间
– 按数据类型划分:日志数据、业务数据、临时数据分开
– 按部门划分:不同部门使用独立命名空间
– 按安全级别划分:敏感数据和普通数据隔离

2.3 Federation网络规划

Federation网络规划需要保证各NameNode之间的网络互通。风哥提示:建议使用统一的命名服务。

# 配置主机名解析
cat /etc/hosts

192.168.1.100 fgedu01.net.cn fgedu01
192.168.1.101 fgedu02.net.cn fgedu02
192.168.1.102 fgedu03.net.cn fgedu03
192.168.1.103 fgedu04.net.cn fgedu04
192.168.1.104 fgedu05.net.cn fgedu05
192.168.1.105 fgedu06.net.cn fgedu06

Part03-生产环境项目实施方案

3.1 多NameNode配置

3.1.1 配置hdfs-site.xml

# 配置Federation相关参数
cat /bigdata/app/hadoop/etc/hadoop/hdfs-site.xml

<configuration>
<!– 定义多个命名服务 –>
<property>
<name>dfs.nameservices</name>
<value>fgeduns1,fgeduns2</value>
</property>

<!– fgeduns1命名服务的NameNode –>
<property>
<name>dfs.ha.namenodes.fgeduns1</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.fgeduns1.nn1</name>
<value>fgedu01.net.cn:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.fgeduns1.nn2</name>
<value>fgedu02.net.cn:8020</value>
</property>

<!– fgeduns2命名服务的NameNode –>
<property>
<name>dfs.ha.namenodes.fgeduns2</name>
<value>nn3,nn4</value>
</property>
<property>
<name>dfs.namenode.rpc-address.fgeduns2.nn3</name>
<value>fgedu03.net.cn:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.fgeduns2.nn4</name>
<value>fgedu04.net.cn:8020</value>
</property>
</configuration>

3.1.2 配置core-site.xml

# 配置默认文件系统
cat /bigdata/app/hadoop/etc/hadoop/core-site.xml

<configuration>
<!– 默认文件系统使用ViewFS –>
<property>
<name>fs.defaultFS</name>
<value>viewfs://fgeducluster/</value>
</property>

<!– ViewFS挂载表配置 –>
<property>
<name>fs.viewfs.mounttable.fgeducluster.link./user</name>
<value>hdfs://fgeduns1/user</value>
</property>
<property>
<name>fs.viewfs.mounttable.fgeducluster.link./warehouse</name>
<value>hdfs://fgeduns1/warehouse</value>
</property>
<property>
<name>fs.viewfs.mounttable.fgeducluster.link./logs</name>
<value>hdfs://fgeduns2/logs</value>
</property>
<property>
<name>fs.viewfs.mounttable.fgeducluster.link./tmp</name>
<value>hdfs://fgeduns2/tmp</value>
</property>
</configuration>

3.2 Federation集群部署

3.2.1 格式化多个NameNode

# 格式化第一个命名空间
hdfs namenode -format -clusterId fgeduns1
# 格式化第二个命名空间
hdfs namenode -format -clusterId fgeduns2

# 格式化fgeduns1
2024-01-15 19:00:00,000 INFO namenode.NameNode: STARTUP_MSG:
STARTUP_MSG: args = [-format, -clusterId, fgeduns1]
2024-01-15 19:00:05,123 INFO common.Storage: Storage directory /bigdata/fgdata/namenode has been successfully formatted.

# 格式化fgeduns2
2024-01-15 19:00:10,000 INFO namenode.NameNode: STARTUP_MSG:
STARTUP_MSG: args = [-format, -clusterId, fgeduns2]
2024-01-15 19:00:15,456 INFO common.Storage: Storage directory /bigdata/fgdata/namenode has been successfully formatted.

3.2.2 启动Federation集群

# 启动所有NameNode
hdfs –daemon start namenode
# 启动所有DataNode
hdfs –daemon start datanode
# 验证集群状态
jps

# NameNode进程
31500 NameNode
# DataNode进程
31800 DataNode

# 完整进程列表
31500 NameNode
31800 DataNode
32000 JournalNode
32200 DFSZKFailoverController

3.3 ViewFS配置与使用

3.3.1 验证ViewFS挂载

# 使用ViewFS访问文件系统
hdfs dfs -ls viewfs://fgeducluster/
# 访问挂载的目录
hdfs dfs -ls viewfs://fgeducluster/user
hdfs dfs -ls viewfs://fgeducluster/logs

# ViewFS根目录
Found 4 items
drwxr-xr-x – hdfs hdfs 0 2024-01-15 19:10 viewfs://fgeducluster/logs
drwxrwxrwx – hdfs hdfs 0 2024-01-15 19:10 viewfs://fgeducluster/tmp
drwxr-xr-x – hdfs hdfs 0 2024-01-15 19:10 viewfs://fgeducluster/user
drwxr-xr-x – hdfs hdfs 0 2024-01-15 19:10 viewfs://fgeducluster/warehouse

# user目录(来自fgeduns1)
Found 2 items
drwxr-xr-x – hdfs hdfs 0 2024-01-15 19:10 viewfs://fgeducluster/user/hdfs
drwxr-xr-x – fgedu fgedu 0 2024-01-15 19:10 viewfs://fgeducluster/user/fgedu

# logs目录(来自fgeduns2)
Found 3 items
-rw-r–r– 3 hdfs hdfs 52428800 2024-01-15 19:15 viewfs://fgeducluster/logs/app.log
-rw-r–r– 3 hdfs hdfs 104857600 2024-01-15 19:15 viewfs://fgeducluster/logs/access.log

3.3.2 跨命名空间操作

# 在不同命名空间创建目录
hdfs dfs -mkdir viewfs://fgeducluster/user/fgedu_project
hdfs dfs -mkdir viewfs://fgeducluster/logs/fgedu_logs
# 上传文件到不同命名空间
hdfs dfs -put /bigdata/local_data/data.parquet viewfs://fgeducluster/warehouse/fgedu/
hdfs dfs -put /bigdata/local_logs/app.log viewfs://fgeducluster/logs/fgedu_logs/

# 目录创建成功
# 文件上传成功

# 验证文件分布
hdfs dfs -ls viewfs://fgeducluster/warehouse/fgedu/
-rw-r–r– 3 fgedu fgedu 1073741824 2024-01-15 19:20 viewfs://fgeducluster/warehouse/fgedu/data.parquet

hdfs dfs -ls viewfs://fgeducluster/logs/fgedu_logs/
-rw-r–r– 3 fgedu fgedu 52428800 2024-01-15 19:20 viewfs://fgeducluster/logs/fgedu_logs/app.log

3.4 Federation集群验证

3.4.1 验证命名空间隔离

# 查看各命名空间状态
hdfs dfsadmin -fs hdfs://fgeduns1 -report
hdfs dfsadmin -fs hdfs://fgeduns2 -report

# fgeduns1命名空间报告
Configured Capacity: 540760469504 (503.52 GB)
Present Capacity: 489226530816 (455.52 GB)
DFS Remaining: 478150651904 (445.20 GB)
Live datanodes (6):

# fgeduns2命名空间报告
Configured Capacity: 540760469504 (503.52 GB)
Present Capacity: 489226530816 (455.52 GB)
DFS Remaining: 478150651904 (445.20 GB)
Live datanodes (6):

3.4.2 验证负载分布

# 查看各NameNode负载
hdfs dfsadmin -fs hdfs://fgeduns1 -metasave fgeduns1_meta.txt
hdfs dfsadmin -fs hdfs://fgeduns2 -metasave fgeduns2_meta.txt
cat /bigdata/fgdata/fgeduns1_meta.txt | head -20

# fgeduns1元数据统计
Total Files: 12500
Total Blocks: 37500
Total Memory: 4294967296

# fgeduns2元数据统计
Total Files: 8500
Total Blocks: 25500
Total Memory: 3221225472

Part04-生产案例与实战讲解

4.1 多业务线隔离案例

某企业有多个业务线,需要实现数据隔离。更多视频教程www.fgedu.net.cn 使用Federation架构实现多业务线数据隔离。

# 配置多业务线命名空间
cat /bigdata/app/hadoop/etc/hadoop/core-site.xml | grep -A2 “mounttable”

<!– 电商业务 –>
<property>
<name>fs.viewfs.mounttable.fgeducluster.link./ecommerce</name>
<value>hdfs://fgeduns1/ecommerce</value>
</property>

<!– 金融业务 –>
<property>
<name>fs.viewfs.mounttable.fgeducluster.link./finance</name>
<value>hdfs://fgeduns2/finance</value>
</property>

<!– 日志数据 –>
<property>
<name>fs.viewfs.mounttable.fgeducluster.link./logs</name>
<value>hdfs://fgeduns3/logs</value>
</property>

4.2 Federation扩容案例

当集群规模扩大时,需要添加新的命名空间。学习交流加群风哥微信: itpux-com

# 添加新命名空间fgeduns3
# 1. 修改配置文件
vi /bigdata/app/hadoop/etc/hadoop/hdfs-site.xml
# 2. 添加新NameNode配置
# 3. 格式化新命名空间
hdfs namenode -format -clusterId fgeduns3
# 4. 启动新NameNode
hdfs –daemon start namenode

# 新命名空间配置
<property>
<name>dfs.nameservices</name>
<value>fgeduns1,fgeduns2,fgeduns3</value>
</property>

# 格式化成功
2024-01-15 20:00:00,000 INFO common.Storage: Storage directory has been successfully formatted.

# 新NameNode启动成功
starting namenode, logging to /bigdata/app/hadoop/logs/hadoop-hdfs-namenode-fgedu05.out

4.3 Federation运维案例

4.3.1 命名空间迁移

# 将目录从一个命名空间迁移到另一个
# 1. 创建目标目录
hdfs dfs -mkdir hdfs://fgeduns2/warehouse
# 2. 复制数据
hdfs distcp hdfs://fgeduns1/warehouse hdfs://fgeduns2/warehouse
# 3. 更新ViewFS挂载
# 4. 删除源数据
hdfs dfs -rm -r -skipTrash hdfs://fgeduns1/warehouse

# 数据复制进度
24/01/15 20:30:00 INFO tools.DistCp: Number of files to copy: 5000
24/01/15 20:45:00 INFO tools.DistCp: Copy completed: 5000 files, 50GB

# 迁移完成
Deleted hdfs://fgeduns1/warehouse

Part05-风哥经验总结与分享

5.1 Federation最佳实践

在实际生产环境中,Federation部署需要注意以下几点:from bigdata视频:www.itpux.com

风哥经验总结:
1. 合理规划命名空间数量,避免过度拆分
2. 每个命名空间配置HA,保证高可用
3. 使用ViewFS提供统一访问入口
4. 定期监控各命名空间负载,及时调整
5. 制定命名空间迁移预案,应对业务变化

5.2 Federation常见问题解决

5.2.1 ViewFS挂载失效

风哥提示:ViewFS挂载失效通常是由于配置文件未同步或NameNode故障导致。

# 检查ViewFS配置
hdfs getconf -confKey fs.viewfs.mounttable.fgeducluster.link./user
# 检查NameNode状态
hdfs haadmin -getAllServiceState

# ViewFS配置正常
hdfs://fgeduns1/user

# NameNode状态正常
fgedu01.net.cn:8020 active
fgedu02.net.cn:8020 standby
fgedu03.net.cn:8020 active
fgedu04.net.cn:8020 standby

5.2.2 跨命名空间数据访问

注意事项:
– 跨命名空间操作需要使用完整路径
– 不支持跨命名空间的原子操作
– 大数据量迁移使用distcp工具

# 跨命名空间复制
hdfs distcp viewfs://fgeducluster/user/fgedu viewfs://fgeducluster/logs/fgedu_backup

# 复制进度
24/01/15 21:00:00 INFO tools.DistCp: Number of files to copy: 1000
24/01/15 21:10:00 INFO tools.DistCp: Copy completed: 1000 files, 10GB

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息