
在HDFS(Hadoop Distributed File System)中,Block(块)是数据存储的基本单元。HDFS使用Block的概念来在多个DataNode上分布式存储文件数据。以下是HDFS中Block存储的关键特性和流程:
1. **Block大小**:
- HDFS中的默认Block大小为128MB(可配置)。文件数据被分割成大小为Block的块进行存储。
2. **文件分割**:
- 当文件大小超过Block大小时,文件会被分割成多个Block。每个Block可以存储最大128MB的数据(或根据配置的其他大小)。
3. **Block副本**:
- 为了数据的高可用性和容错能力,每个Block会有多个副本(默认是3个)。这些副本会分散存储在不同的DataNode上。
4. **Block存储策略**:
- Block的副本按照一定的策略存储,例如,第一个副本存储在写入数据的客户端所在的机架上,第二个副本存储在不同的机架上,第三个副本存储在不同的机架上的不同节点上。
5. **数据写入**:
- 当客户端写入数据时,数据首先被缓存在客户端的内存中,当达到一个Block大小时,该Block会被写入到DataNode上。
6. **流水线复制**:
- DataNode接收到Block数据后,会开始复制该Block到其他DataNode上,以创建所需的副本数量。这个过程是流水线式的,提高了复制效率。
7. **心跳和块报告**:
- DataNode定期向NameNode发送心跳信号和块报告。块报告包含DataNode上所有Block的列表,NameNode使用这些信息来管理集群状态。
8. **数据读取**:
- 当客户端请求读取数据时,它会从NameNode获取包含所需数据的Block的位置信息,然后直接从DataNode读取数据。
9. **数据恢复**:
- 如果某个DataNode失败,NameNode会从其他DataNode上复制Block副本来替换丢失的数据。
10. **数据压缩**:
- HDFS支持Block级别的压缩,可以减少存储需求和网络传输。
11. **数据校验**:
- DataNode存储每个Block的校验和信息,用于在读取数据时验证数据的完整性。
12. **Block去重**:
- HDFS在写入数据时会检查已有的Block,如果数据相同,则不会重复存储,而是引用已有的Block。
13. **内存映射**:
- DataNode使用内存映射文件(Memory-mapped Files)来存储Block,这可以提高数据读写的性能。
14. **存储类型**:
- HDFS支持不同类型的存储介质,如SSD、HDD等,可以根据Block的重要性来选择存储介质。
HDFS的Block存储机制是其设计的核心,它使得HDFS能够高效地存储和管理大规模数据集。通过Block的副本策略和数据的流水线复制,HDFS确保了数据的高可用性和容错能力。