在 Linux 环境下,HDFS(Hadoop Distributed File System)存储数据的方式 并不是像普通文件系统那样直接挂载磁盘,而是通过 Hadoop 集群 来完成的。下面从 原理 + 实际操作 两个角度说明。
HDFS 采用 主从架构(Master/Slave):
| 角色 | 作用 |
|---|---|
| NameNode | 管理元数据(文件名、目录结构、块位置) |
| DataNode | 真正存储数据块 |
| Secondary NameNode | 辅助 NameNode(不是备份) |
文件被切分成块(Block)
Block 存储在 DataNode 上
NameNode 只存元数据
/user/data/a.log
block1 → datanode1, datanode2
block2 → datanode2, datanode3
hdfs-site.xml 中配置:<property>
<name>dfs.datanode.data.dir</name>
<value>/data/hdfs/datanode</value>
</property>
在 DataNode 机器上你会看到类似:
/data/hdfs/datanode/current/BP-xxx/current/finalized/subdir0/subdir1/
里面是:
blk_1073741825
blk_1073741825_1001.meta
⚠️ 不能直接用 cat 查看这些 block 文件
start-dfs.sh
检查:
jps
应看到:
NameNode
DataNode
SecondaryNameNode
hdfs dfs -put localfile.txt /user/hadoop/
查看:
hdfs dfs -ls /user/hadoop
hdfs fsck /user/hadoop/localfile.txt -files -blocks -locations
输出示例:
/user/hadoop/localfile.txt 128 MB
block0: datanode1, datanode2, datanode3
hdfs dfs -cat /user/hadoop/localfile.txt
✅ 适合 大文件、顺序读写
✅ 高容错(副本机制)
✅ 跨机器分布式存储
❌ 不适合低延迟、频繁小文件
❌ HDFS 不是挂载的文件系统
mount | grep hdfs # 一般是看不到的
❌ 不能直接在 Linux 文件系统里操作 HDFS 文件
hdfs dfs 或 APIHDFS 在 Linux 上通过 DataNode 把文件切分成 Block,以多副本方式存储在本地磁盘目录中,并由 NameNode 统一管理元数据。
如果你愿意,我可以帮你: