HDFS 核心机制:文件分块与分布式存储原理
在大数据领域,Hadoop 分布式文件系统(HDFS)是存储海量数据的基石。它之所以能高吞吐、高容错地处理 PB 级数据,核心在于文件分块存储和分布式数据管理。我们来看看这些块是如何生成、分布以及被管理的。
一、HDFS 文件分块机制
1.1 什么是 HDFS 块?
HDFS 将大文件逻辑上划分为固定大小的数据块(Block)。默认情况下,每个块大小为 128MB(Hadoop 2.x 以后版本,之前为 64MB)。与普通文件系统不同,HDFS 中小于块大小的文件不会占用整个块空间,但会消耗一个块的元数据开销。
1.2 文件分块流程
当客户端发起写请求时,NameNode 会检查文件是否存在。如果不存在,就在元数据中创建记录。随后,客户端将文件分割成多个块:第一个块 128MB,第二个块 128MB……最后一个块可能小于 128MB。准备好后,客户端开始向 DataNode 写入。
1.3 分块示例
假设我们要上传一个 500MB 的 data.log 文件:
- 块 1: 0-128MB
- 块 2: 128-256MB
- 块 3: 256-384MB
- 块 4: 384-500MB(最后一个块大小为 116MB)
二、数据块在 DataNode 上的分布策略
2.1 副本机制
为了保证可靠性,HDFS 采用副本机制,默认副本因子为 3。这意味着每个数据块会在集群中保存 3 份拷贝。
2.2 块放置策略
HDFS 采用机架感知(Rack Awareness)策略来放置副本,核心原则如下:
| 副本顺序 | 放置位置 |
|---|---|
| 第一个副本 | 客户端所在 DataNode |
| 第二个副本 | 不同机架的随机节点 |
| 第三个副本 | 与第二个副本同机架的不同节点 |
这种策略既保证了数据不丢失,又兼顾了网络带宽效率。
2.3 详细分布过程
以 3 副本为例,数据写入时的复制管道是这样的:客户端先写入第一个副本,然后该副本自动转发给第二个,再转发给第三个。这样形成一条写入管道,确保数据一致性。
2.4 多块分布示例
对于 500MB 文件(4 个块)在 3 节点集群上的分布,大致情况如下:
DataNode1: block1-1(主), block2-2, block4-3
DataNode2: block1-2, block2-1(主), block3-3, block4-2
DataNode3: block1-3, block2-3, block3-1(主), block3-2, block4-1(主)


