温馨提示×

linux hdfs如何存储数据

小樊
34
2026-07-29 08:51:15
栏目: 云计算

Linux 环境下,HDFS(Hadoop Distributed File System)存储数据的方式 并不是像普通文件系统那样直接挂载磁盘,而是通过 Hadoop 集群 来完成的。下面从 原理 + 实际操作 两个角度说明。


一、HDFS 是如何存储数据的(原理)

1. HDFS 的基本架构

HDFS 采用 主从架构(Master/Slave)

角色 作用
NameNode 管理元数据(文件名、目录结构、块位置)
DataNode 真正存储数据块
Secondary NameNode 辅助 NameNode(不是备份)

2. 数据是如何存储的

  1. 文件被切分成块(Block)

    • 默认块大小:128MB(Hadoop 2.x / 3.x)
    • 例如:一个 300MB 的文件 → 3 个 block
  2. Block 存储在 DataNode 上

    • 每个 block 会存储 多个副本(默认 3 个)
    • 副本分布在不同机器上,保证高可用
  3. NameNode 只存元数据

    • 不存真实数据
    • 例如:
      /user/data/a.log
      block1 → datanode1, datanode2
      block2 → datanode2, datanode3
      

3. 数据在 Linux 磁盘上的真实形态

  • HDFS 数据最终存储在 Linux 本地磁盘目录
  • 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 文件


二、在 Linux 中如何使用 HDFS 存储数据(操作)

1. 启动 HDFS

start-dfs.sh

检查:

jps

应看到:

NameNode
DataNode
SecondaryNameNode

2. 上传文件到 HDFS

hdfs dfs -put localfile.txt /user/hadoop/

查看:

hdfs dfs -ls /user/hadoop

3. 查看文件存储信息

hdfs fsck /user/hadoop/localfile.txt -files -blocks -locations

输出示例:

/user/hadoop/localfile.txt 128 MB
block0: datanode1, datanode2, datanode3

4. 读取文件

hdfs dfs -cat /user/hadoop/localfile.txt

三、HDFS 存储数据的特点

✅ 适合 大文件、顺序读写
✅ 高容错(副本机制)
✅ 跨机器分布式存储
❌ 不适合低延迟、频繁小文件


四、常见误区

HDFS 不是挂载的文件系统

mount | grep hdfs  # 一般是看不到的

不能直接在 Linux 文件系统里操作 HDFS 文件

  • 必须通过 hdfs dfs 或 API

五、总结一句话

HDFS 在 Linux 上通过 DataNode 把文件切分成 Block,以多副本方式存储在本地磁盘目录中,并由 NameNode 统一管理元数据。

如果你愿意,我可以帮你:

  • 画一张 HDFS 存储示意图
  • HDFS 和 Linux 本地文件系统对比
  • 结合 Hadoop 3.x / 2.x 差异 说明

0