目录大纲
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分别管理不同的命名空间,共同对外提供服务,实现水平扩展。
1.2 Federation解决的问题
单NameNode架构存在扩展性限制,主要表现在:学习交流加群风哥微信: itpux-com
– 内存限制:NameNode元数据存储在内存中,单机内存有限
– 性能瓶颈:所有请求都由单个NameNode处理
– 隔离性差:不同业务的元数据混合存储
– 扩展困难:无法通过增加NameNode提升容量
1.3 ViewFS原理说明
ViewFS是Federation架构中的关键组件,提供统一的文件系统视图。from bigdata视频:www.itpux.com ViewFS将多个命名空间映射到统一的目录结构,对用户透明。
– 提供统一的命名空间视图
– 将不同目录路由到不同的NameNode
– 对应用程序透明,无需修改代码
– 支持动态添加和删除命名空间
Part02-生产环境规划与建议
2.1 Federation集群规划
Federation集群规划需要考虑业务隔离、负载均衡、高可用等因素。更多学习教程公众号风哥教程itpux_com
cat /bigdata/app/hadoop/etc/hadoop/workers
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.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
cat /bigdata/app/hadoop/etc/hadoop/hdfs-site.xml
<!– 定义多个命名服务 –>
<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
<!– 默认文件系统使用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
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集群
hdfs –daemon start namenode
# 启动所有DataNode
hdfs –daemon start datanode
# 验证集群状态
jps
31500 NameNode
# DataNode进程
31800 DataNode
# 完整进程列表
31500 NameNode
31800 DataNode
32000 JournalNode
32200 DFSZKFailoverController
3.3 ViewFS配置与使用
3.3.1 验证ViewFS挂载
hdfs dfs -ls viewfs://fgeducluster/
# 访问挂载的目录
hdfs dfs -ls viewfs://fgeducluster/user
hdfs dfs -ls viewfs://fgeducluster/logs
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
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 验证负载分布
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
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
# 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挂载失效
hdfs getconf -confKey fs.viewfs.mounttable.fgeducluster.link./user
# 检查NameNode状态
hdfs haadmin -getAllServiceState
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
