Hadoop 之 HDFS 的数据完整性

31 篇文章 0 订阅
7 篇文章 0 订阅

Hadoop 用户肯定都不希望系统在存储和处理数据时不会丢失或者损坏任何数据。接下来,我们来考究一下 HDFS 在为了保证数据完整性,所做的工作。

总的来说,HDFS 会对写入的数据计算校验和,并在读取数据时验证校验和。

datanode 负责收到数据后存储该数据及其校验和。datanode 的数据来源可分为两种,其一为是从客户端收到的数据,其二为从其他 datanode 复制来的数据。还有一种情况,正在些数据的客户端将数据及其校验和发送到由一系列 datanode 组成的管线,管线中最后一个 datanode 负责验证校验和。

客户端从 datanode 读取数据时,也会验证校验和,将他们与 datanode 中存储的校验和进行比较。每个 datanode 都持久保存一个用于验证的校验和日志,所以会知道每个数据块的最后一次验证时间。客户端成功验证一个数据块后,会告诉这个 datanode 来更新日志。对于检测损坏的磁盘很有价值。

不只是客户端读取数据库时会验证校验和,每个 datanode 也会在一个后台进程中运行一个 DataBlockScanner ,从而定期验证存储在这个 datanode 的所有数据库。该措施是解决物理存储媒体上位损坏的有力措施。

HDFS 会存储每个数据块的复本,可以通过数据复本来修复损坏的数据块。 客户端在读取数据块时,如果检测到错误首先向 namenode 报告已损坏的数据块及其正在尝试读取操作的这个 datanode 。namenode 会将这个数据块标记为已损坏,对这个数据块的请求会被 namenode 安排到另一个复本上。之后,它安排这个数据块的另一个复本复制到另一个 datanode 上,如此,数据块的复本因子又回到期望水平。此后,已损坏的数据块复本会被删除。

在读取数据时,也可以禁止校验,把已损坏的数据在删除前尝试看看是否能够恢复数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值