前文分析了 NameNode,本文进一步解析 DataNode 的设计和实现要点。
文件存储
DataNode 正如其名是负责存储文件数据的节点。HDFS 中文件的存储方式是将文件按块(block)切分,默认一个 block 64MB(该大小可配置)。若文件大小超过一个 block 的容量可能会被切分为多个 block,并存储在不同的 DataNode 上。若文件大小小于一个 block 的容量,则文件只有一个 block,实际占用的存储空间为文件大小容量加上一点额外的校验数据。也可以这么说一个文件至少由一个或多个 block 组成,而一个 block 仅属于一个文件。
block 是一个逻辑概念对象,由 DataNode 基于本地文件系统来实现。每个 block 在本地文件系统中由两个文件组成,第一个文件包含文件数据本身,第二个文件则记录 block 的元信息(metadata)如:数据校验和(checksum)。所以每一个 block 对象实际物理对应两个文件,但 DataNode 不会将文件创建在同一个目录下。因为本机文件系统可能不能高效的支持单目录下的大量文件,DataNode 会使用启发式方法决定单个目录下存放多少文件合适并在适当时候创建子目录。
文件数据存储的可靠性依赖多副本保障,对于单一 DataNode 节点而言只需保证自己存储的 block 是完整且无损坏的。DataNode 会主动周期性的运行一个 block 扫描器(scanner)通过比对 checksum 来检查 block 是否损坏。另外还有一种被动的检查方式,就是当读取时检查。
文件操作
HDFS 支持的文件操作包括写入(新增、追加)、读取和删除。HDFS 定义了一种 multi-reader, single-writer 的文件访问语义。而访问标准依然参照大家熟悉的依据 POSIX(Portable Operating System Interface)为单机文件系统定义的 API。
- Open 打开文件
- Read/Write 读写文件
- Close 关闭文件

本文深入解析了HDFS中DataNode的设计与实现,包括文件存储、文件操作(写入、读取、删除)以及生命周期管理。DataNode负责存储文件数据,将文件按block切分,每个block由DataNode的两个文件组成。写文件采用multi-reader, single-writer语义,通过DataNode的流水线写入提升性能。读文件根据就近原则选择DataNode。异常处理和生命周期管理确保了系统的稳定性和数据可靠性。"
40186197,3876927,无线AP安全配置:更改默认用户名与口令,"['局域网', '无线路由器', '通信安全']
最低0.47元/天 解锁文章
523

被折叠的 条评论
为什么被折叠?



