hdfs checkSum

 

 

Datanode在把数据实际存储之前会验证数据的校验和.

client通过pipeline把数据写入datanode. 最后一个datanode会负责检查校验和.

当client从datanode读取数据时,也会检查校验和: 把真实数据的校验和同datanode上的校验和进行比较.

 

每个datanode都保存有一个checksum验证的持久化日志,日志中有当前datanode每个block最后的更新时间.

当client成功验证了一个block, 它会告诉datanode, 之后datanode会更新它的日志.

保存这些信息有助于检测坏磁盘.

 

除了会在client读取数据时验证block, 每个datanode还会在后台运行一个DataBlockScanner线程来周期性验证所有存储在

datanode上的block. 这用来防止物理存储媒介上出现"位衰减".

 

因为HDFS保存有同一个block的多个备份, 所以它可以用好的副本来替换损坏的数据副本.

如果某个client在读取数据时检测到数据错误, 在抛出ChecksumException之前, 它会向namenode上报信息告知具体

的bad block还有datanode. namenode会把指定的block标记为"corrupt", 之后的client就不会再被定位到此block,此block也不会

再被复制到其它datanode.之后namenode会调度一个此block的正常副本,以保证负载平衡.这之后,损坏的block副本会被删除.

 

可以在对FileSystem调用open()之前调用setVerifyChecksum()来禁止校验和检测.

也可以通过在shell中执行-get,-copyToLocal命令时指定-ignoreCrc选项做到.

 

 

LocalFileSystem在client端进行了检验和生成.如果你往hdfs写一个文件filename, 那么client会

在与filename相同的路径下透明的创建一个包含所有block校验和信息的隐藏文件.filename.crc,检验和的chunk size通过bytes.per.checksum属性来指定,

默认为512字节.chunk size也保存在.crc文件的元数据中, 所以即使bytes.per.checksum后来被改变了文件一样能被正确地解析.

当文件被读取时会进行Checksum检测,如果发生错误,LocalFileSystem会抛出一个ChecksumException.

 

转自 http://www.cnblogs.com/xuxm2007/archive/2011/06/28/2091887.html

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值