本文档风哥主要介绍Hadoop HDFS部署与格式化实战,包括HDFS架构原理、HDFS核心组件角色、HDFS核心特性、HDFS集群规划、HDFS配置文件说明、HDFS核心参数配置、Hadoop安装部署、HDFS格式化操作、HDFS服务启动、HDFS集群验证、HDFS功能测试、HDFS常见问题处理等内容,风哥教程参考Hadoop官方文档HDFS Commands、HdfsDesign等内容,适合大数据运维人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。
Part01-基础概念与理论知识
1.1 HDFS架构原理
HDFS(Hadoop Distributed File System)是Hadoop的核心组件,是一个分布式文件系统,设计用于在廉价硬件上运行,提供高吞吐量的数据访问。更多视频教程www.fgedu.net.cn
- 主从架构:NameNode(主节点)和DataNode(从节点)
- 块存储:文件被切分成块(默认128MB),分布存储在多个DataNode
- 副本机制:每个块默认3个副本,提高数据可靠性
- 心跳机制:DataNode定期向NameNode发送心跳
- 机架感知:副本分布在不同机架,提高容错性
1.2 HDFS核心组件角色
HDFS核心组件角色:
| 组件 | 角色 | 功能 |
|---|---|---|
| NameNode | 主节点 | 管理文件系统命名空间、管理数据块映射、处理客户端请求 |
| DataNode | 从节点 | 存储数据块、执行读写操作、定期发送心跳 |
| SecondaryNameNode | 辅助节点 | 合并编辑日志和镜像文件、辅助NameNode |
| JournalNode | 协调节点 | 存储编辑日志、用于NameNode HA |
| ZKFC | 故障转移控制器 | 监控NameNode状态、执行故障转移 |
1.3 HDFS核心特性
HDFS核心特性:
- 高容错性:自动检测和恢复故障节点
- 高吞吐量:适合大规模数据集的访问
- 大文件存储:适合存储大文件,不适合小文件
- 顺序读写:适合顺序读写,不适合随机读写
- 一次写入多次读取:文件写入后不支持修改
Part02-生产环境规划与建议
2.1 HDFS集群规划
HDFS集群规划需要考虑节点数量、硬件配置、存储容量等因素:
## 集群规模:10节点
## NameNode节点(2台)
nn1.fgedu.net.cn(192.168.1.10)
– CPU:16核
– 内存:128GB
– 磁盘:2TB RAID1
– 部署:NameNode、ZKFC、JournalNode
nn2.fgedu.net.cn(192.168.1.11)
– CPU:16核
– 内存:128GB
– 磁盘:2TB RAID1
– 部署:NameNode、ZKFC、JournalNode
## DataNode节点(6台)
dn1-dn6.fgedu.net.cn(192.168.1.12-17)
– CPU:16核
– 内存:64GB
– 磁盘:12块8TB(JBOD)
– 部署:DataNode
## ZooKeeper节点(3台)
zk1-zk3.fgedu.net.cn(192.168.1.18-20)
– CPU:8核
– 内存:16GB
– 磁盘:500GB
– 部署:ZooKeeper、JournalNode
2.2 HDFS配置文件说明
HDFS核心配置文件:
## core-site.xml
Hadoop核心配置文件,包括:
– fs.defaultFS:默认文件系统
– hadoop.tmp.dir:临时目录
– io.file.buffer.size:IO缓冲区大小
## hdfs-site.xml
HDFS配置文件,包括:
– dfs.replication:副本数
– dfs.namenode.name.dir:NameNode数据目录
– dfs.datanode.data.dir:DataNode数据目录
– dfs.blocksize:块大小
– dfs.namenode.handler.count:NameNode处理线程数
## hadoop-env.sh
Hadoop环境变量配置,包括:
– JAVA_HOME:JDK路径
– HADOOP_HEAPSIZE:堆内存大小
– HADOOP_LOG_DIR:日志目录
2.3 HDFS核心参数配置
HDFS核心参数配置建议:
## core-site.xml配置
## hdfs-site.xml配置
Part03-生产环境项目实施方案
3.1 Hadoop安装部署
3.1.1 下载并解压Hadoop
cd /bigdata/app
wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.5/hadoop-3.3.5.tar.gz
# 解压Hadoop
tar -zxvf hadoop-3.3.5.tar.gz
# 创建软链接
ln -s hadoop-3.3.5 hadoop
# 设置权限
chown -R hadoop:hadoop hadoop-3.3.5
chown -R hadoop:hadoop hadoop
# 验证安装
ls -l hadoop
lrwxrwxrwx 1 hadoop hadoop 13 Apr 8 11:00 hadoop -> hadoop-3.3.5
3.1.2 配置Hadoop环境变量
cat >> /etc/profile << 'EOF' export HADOOP_HOME=/bigdata/app/hadoop export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop export HADOOP_COMMON_HOME=$HADOOP_HOME export HADOOP_HDFS_HOME=$HADOOP_HOME export HADOOP_YARN_HOME=$HADOOP_HOME export HADOOP_MAPRED_HOME=$HADOOP_HOME EOF # 使环境变量生效 source /etc/profile # 验证环境变量 echo $HADOOP_HOME /bigdata/app/hadoop # 验证Hadoop版本 hadoop version Hadoop 3.3.5 Source code repository https://github.com/apache/hadoop.git -r a3b9c37a397ad4188041dd80621bdeefc46885f2 Compiled by stevel on 2023-03-15T14:56Z Compiled with protoc 3.7.1 From source with checksum 7b4fe90e1c6b9e7e6c6c6c6c6c6c6c6c This command was run using /bigdata/app/hadoop-3.3.5/share/hadoop/common/hadoop-common-3.3.5.jar
3.1.3 配置hadoop-env.sh
cat > $HADOOP_HOME/etc/hadoop/hadoop-env.sh << 'EOF' # Java环境 export JAVA_HOME=/bigdata/app/jdk1.8.0_281 # Hadoop环境 export HADOOP_HOME=/bigdata/app/hadoop export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop export HADOOP_LOG_DIR=/bigdata/logs/hadoop export HADOOP_PID_DIR=/bigdata/tmp/hadoop # NameNode内存 export HADOOP_NAMENODE_OPTS="-Xmx64g" # DataNode内存 export HADOOP_DATANODE_OPTS="-Xmx8g" # 其他参数 export HADOOP_HEAPSIZE_MAX=2048 export HADOOP_HEAPSIZE_MIN=1024 EOF # 创建日志目录 mkdir -p /bigdata/logs/hadoop mkdir -p /bigdata/tmp/hadoop chown -R hadoop:hadoop /bigdata/logs chown -R hadoop:hadoop /bigdata/tmp
3.2 HDFS格式化操作
3.2.1 配置HDFS配置文件
cat > $HADOOP_HOME/etc/hadoop/core-site.xml << 'EOF'
EOF
# 配置hdfs-site.xml
cat > $HADOOP_HOME/etc/hadoop/hdfs-site.xml << 'EOF'
EOF
3.2.2 格式化NameNode
su – hadoop
# 创建NameNode数据目录
mkdir -p /bigdata/fgdata/namenode
mkdir -p /bigdata/fgdata/datanode
# 格式化NameNode
hdfs namenode -format
WARNING: /bigdata/logs/hadoop does not exist. Creating.
2026-04-08 11:10:30,123 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = nn1.fgedu.net.cn/192.168.1.10
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 3.3.5
************************************************************/
2026-04-08 11:10:30,456 INFO namenode.NameNode: registered UNIX signal handlers for [TERM, HUP, INT]
2026-04-08 11:10:30,789 INFO namenode.NameNode: createNameNode [-format]
2026-04-08 11:10:31,012 INFO namenode.NameNode: Formatting using clusterid: CID-abc123-def456-ghi789
2026-04-08 11:10:31,234 INFO namenode.FSNamesystem: No KeyProvider found.
2026-04-08 11:10:31,456 INFO namenode.FSNamesystem: fsLock is fair: true
2026-04-08 11:10:31,678 INFO blockmanagement.DatanodeManager: dfs.block.invalidate.limit=1000
2026-04-08 11:10:31,890 INFO blockmanagement.DatanodeManager: dfs.namenode.datanode.registration.ip-hostname-check=true
2026-04-08 11:10:32,012 INFO blockmanagement.BlockManager: dfs.namenode.startup.delay.block.deletion.sec is set to 000:00:00:00.000
2026-04-08 11:10:32,234 INFO blockmanagement.BlockManager: The block deletion will start around 2026 Apr 08 11:10:32
2026-04-08 11:10:32,456 INFO util.GSet: Computing capacity for graph Blocks.
2026-04-08 11:10:32,678 INFO util.GSet: VM type = 64-bit
2026-04-08 11:10:32,890 INFO util.GSet: 2.0% max memory 1.8 GB = 36.6 MB
2026-04-08 11:10:33,012 INFO util.GSet: capacity = 2^22 = 4194304 entries
2026-04-08 11:10:33,234 INFO namenode.FSDirectory: ACLs enabled? false
2026-04-08 11:10:33,456 INFO namenode.FSDirectory: POSIX ACL inheritance enabled? true
2026-04-08 11:10:33,678 INFO namenode.FSDirectory: XAttrs enabled? true
2026-04-08 11:10:33,890 INFO namenode.NameNode: Caching file names occurring more than 10 times
2026-04-08 11:10:34,012 INFO snapshot.SnapshotManager: Loaded snapshot capture using 0ms.
2026-04-08 11:10:34,234 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at nn1.fgedu.net.cn/192.168.1.10
************************************************************/
# 验证格式化结果
ls -l /bigdata/fgdata/namenode/current/
total 16
-rw-r–r– 1 hadoop hadoop 1041 Apr 8 11:10 VERSION
-rw-r–r– 1 hadoop hadoop 249 Apr 8 11:10 seen_txid
-rw-r–r– 1 hadoop hadoop 323 Apr 8 11:10 fsimage_0000000000000000000
-rw-r–r– 1 hadoop hadoop 62 Apr 8 11:10 fsimage_0000000000000000000.md5
3.3 HDFS服务启动
3.3.1 启动HDFS服务
hdfs –daemon start namenode
# 查看NameNode进程
jps
12345 NameNode
12456 Jps
# 查看NameNode日志
tail -f /bigdata/logs/hadoop/hadoop-hadoop-namenode-nn1.log
2026-04-08 11:15:30,123 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = nn1.fgedu.net.cn/192.168.1.10
STARTUP_MSG: args = []
STARTUP_MSG: version = 3.3.5
************************************************************/
2026-04-08 11:15:30,456 INFO namenode.NameNode: registered UNIX signal handlers for [TERM, HUP, INT]
2026-04-08 11:15:30,789 INFO namenode.NameNode: createNameNode []
2026-04-08 11:15:31,012 INFO namenode.NameNode: NameNode RPC server is starting
2026-04-08 11:15:31,234 INFO namenode.NameNode: NameNode HTTP server is starting on port 9870
2026-04-08 11:15:31,456 INFO namenode.NameNode: NameNode HTTP server started on port 9870
# 启动DataNode(在所有DataNode节点执行)
hdfs –daemon start datanode
# 查看DataNode进程
jps
12345 DataNode
12456 Jps
# 启动SecondaryNameNode
hdfs –daemon start secondarynamenode
# 查看所有进程
jps
12345 NameNode
12456 SecondaryNameNode
12567 DataNode
12678 Jps
3.3.2 验证HDFS服务
hdfs dfsadmin -safemode get
Safe mode is OFF
# 查看HDFS集群状态
hdfs dfsadmin -report
Configured Capacity: 576460752003072 (524 TB)
Present Capacity: 518826795417600 (471.7 TB)
DFS Remaining: 518826795417600 (471.7 TB)
DFS Used: 0 (0 B)
DFS Used%: 0.00%
Replicated Blocks:
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0
Missing blocks (with replication factor 1): 0
Low redundancy blocks: 0
Pending deletion blocks: 0
Erasure Coded Block Groups:
Block groups with corrupt internal blocks: 0
Missing block groups: 0
Low redundancy block groups: 0
Pending deletion block groups: 0
————————————————-
Live datanodes (6):
Name: 192.168.1.12:9866 (dn1.fgedu.net.cn)
Hostname: dn1.fgedu.net.cn
Decommission Status : Normal
Configured Capacity: 96076792006784 (87.3 TB)
DFS Used: 0 (0 B)
Non DFS Used: 96076792006784 (87.3 TB)
DFS Remaining: 0 (0 B)
DFS Used%: 0.00%
DFS Remaining%: 0.00%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Wed Apr 08 11:20:30 CST 2026
Last Block Report: Wed Apr 08 11:20:30 CST 2026
Num of Blocks: 0
# 访问HDFS Web界面
# 浏览器访问:http://nn1:9870
Part04-生产案例与实战讲解
4.1 HDFS集群验证
4.1.1 创建测试目录
hdfs dfs -mkdir -p /user/hadoop/test
# 查看目录
hdfs dfs -ls /
Found 1 items
drwxr-xr-x – hadoop supergroup 0 2026-04-08 11:25 /user
# 查看详细目录
hdfs dfs -ls -R /
drwxr-xr-x – hadoop supergroup 0 2026-04-08 11:25 /user
drwxr-xr-x – hadoop supergroup 0 2026-04-08 11:25 /user/hadoop
drwxr-xr-x – hadoop supergroup 0 2026-04-08 11:25 /user/hadoop/test
4.1.2 上传测试文件
echo “Hello Hadoop” > /tmp/test.txt
# 上传文件到HDFS
hdfs dfs -put /tmp/test.txt /user/hadoop/test/
# 查看文件
hdfs dfs -ls /user/hadoop/test/
Found 1 items
-rw-r–r– 3 hadoop supergroup 13 2026-04-08 11:30 /user/hadoop/test/test.txt
# 查看文件内容
hdfs dfs -cat /user/hadoop/test/test.txt
Hello Hadoop
# 查看文件块信息
hdfs fsck /user/hadoop/test/test.txt -files -blocks -locations
Connecting to namenode via http (nn1:9870)…
FSCK started by hadoop (auth:SIMPLE) from /192.168.1.10 for path /user/hadoop/test/test.txt at Wed Apr 08 11:35:30 CST 2026
/user/hadoop/test/test.txt 13 bytes, 1 block(s): OK
0. BP-1234567890-192.168.1.10-1234567890123:blk_1073741825_1001 len=13 Live_repl=3 [DatanodeInfoWithStorage[192.168.1.12:9866,DS-1234567890,DISK], DatanodeInfoWithStorage[192.168.1.13:9866,DS-1234567891,DISK], DatanodeInfoWithStorage[192.168.1.14:9866,DS-1234567892,DISK]]
Status: HEALTHY
Number of data-nodes: 6
Number of racks: 1
Total blocks: 1
Avg block size: 13.00 B
Min block size: 13.00 B
Max block size: 13.00 B
FSCK ended at Wed Apr 08 11:35:30 CST 2026 in 2 milliseconds
4.2 HDFS功能测试
4.2.1 文件操作测试
hdfs dfs -mkdir -p /fgedu/data
# 上传文件
hdfs dfs -put /etc/hosts /fgedu/data/
# 下载文件
hdfs dfs -get /fgedu/data/hosts /tmp/hosts_download
# 复制文件
hdfs dfs -cp /fgedu/data/hosts /fgedu/data/hosts_backup
# 移动文件
hdfs dfs -mv /fgedu/data/hosts_backup /fgedu/data/hosts_mv
# 删除文件
hdfs dfs -rm /fgedu/data/hosts_mv
Deleted /fgedu/data/hosts_mv
# 删除目录
hdfs dfs -rm -r /fgedu
Deleted /fgedu
# 查看文件统计信息
hdfs dfs -stat “%y %n” /user/hadoop/test/test.txt
2026-04-08 11:30:00 test.txt
# 查看文件大小
hdfs dfs -du -h /user/hadoop/test/
13 39 /user/hadoop/test/test.txt
4.2.2 权限管理测试
hdfs dfs -chmod 755 /user/hadoop/test
# 修改文件所有者
hdfs dfs -chown root:root /user/hadoop/test/test.txt
# 查看权限
hdfs dfs -ls /user/hadoop/test/
Found 1 items
-rwxr-xr-x 3 root root 13 2026-04-08 11:30 /user/hadoop/test/test.txt
4.3 HDFS常见问题处理
4.3.1 NameNode无法启动
# 分析步骤:
# 1. 查看NameNode日志
tail -100 /bigdata/logs/hadoop/hadoop-hadoop-namenode-nn1.log
# 2. 检查端口占用
netstat -tulnp | grep 9000
tcp 0 0 0.0.0.0:9000 0.0.0.0:* LISTEN 12345/java
# 3. 检查NameNode数据目录
ls -l /bigdata/fgdata/namenode/current/
# 4. 检查配置文件
cat $HADOOP_HOME/etc/hadoop/core-site.xml
cat $HADOOP_HOME/etc/hadoop/hdfs-site.xml
# 5. 检查主机名解析
ping nn1
# 解决方案:
# – 检查配置文件是否正确
# – 检查端口是否被占用
# – 检查数据目录是否存在
# – 检查主机名解析是否正常
4.3.2 DataNode无法连接NameNode
# 分析步骤:
# 1. 查看DataNode日志
tail -100 /bigdata/logs/hadoop/hadoop-hadoop-datanode-dn1.log
# 2. 检查集群ID是否一致
cat /bigdata/fgdata/datanode/current/VERSION
# 3. 检查网络连接
telnet nn1 9000
# 4. 检查防火墙
systemctl status firewalld
# 解决方案:
# – 如果集群ID不一致,需要重新格式化或删除DataNode数据目录
# – 检查网络连接和防火墙配置
# – 确保NameNode正常运行
Part05-风哥经验总结与分享
5.1 HDFS部署最佳实践
HDFS部署最佳实践:
- 高可用架构:生产环境必须配置NameNode HA
- 数据目录分离:NameNode和DataNode数据目录分开存储
- 日志分离:日志目录单独挂载,避免磁盘满影响服务
- 定期备份:定期备份NameNode元数据
- 监控告警:建立完善的监控告警体系
5.2 HDFS性能优化建议
HDFS性能优化建议:
## NameNode优化
– 增加NameNode内存
– 增加处理线程数
– 使用SSD存储元数据
## DataNode优化
– 增加DataNode数量
– 增加磁盘数量
– 使用JBOD模式
– 配置多数据目录
## 网络优化
– 使用万兆网络
– 配置网络绑定
– 优化网络参数
## 块大小优化
– 大文件:256MB或512MB
– 小文件:64MB或128MB
– 根据业务场景调整
5.3 HDFS部署检查清单
HDFS部署检查清单:
- □ JDK已安装并配置环境变量
- □ Hadoop已安装并配置环境变量
- □ 配置文件已正确配置
- □ NameNode已格式化
- □ NameNode服务已启动
- □ DataNode服务已启动
- □ HDFS Web界面可访问
- □ 文件上传下载正常
- □ 副本分布正常
- □ 监控告警已配置
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
