惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

罗磊的独立博客
美团技术团队
Apple Machine Learning Research
Apple Machine Learning Research
Hugging Face - Blog
Hugging Face - Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
月光博客
月光博客
WordPress大学
WordPress大学
The Cloudflare Blog
阮一峰的网络日志
阮一峰的网络日志
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园_首页
博客园 - Franky
博客园 - 司徒正美
酷 壳 – CoolShell
酷 壳 – CoolShell
爱范儿
爱范儿
Jina AI
Jina AI
Last Week in AI
Last Week in AI
雷峰网
雷峰网
IT之家
IT之家
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 聂微东
小众软件
小众软件
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V
V2EX

博客园 - 彭帅

周末开发的一个Google Wave类似的评论系统 CloudHosting平台Eucalyptus分析. Hadoop Ecosystem解决方案---数据仓库 hadoop MapReduce Job失效模型 - 彭帅 设计遐想---基于Google App Engine的IM 系统容灾备份选型的决策表 GAE技巧汇总 hadoop Map Stage流程分析 hadoop作业调度 - 源码分析 A Viewstate for PHP Internet级单点登录的数据管理(转) a CouchDB essentials 从网络上整理的google c++编程风格指南 网络编程套路杂记1 UserAgent的历史变迁 云计算-My Future, The IT's Future (转载)Hadoop常用SDK系列五 TotalOrderPartitioner OnlyXP盘点2008下半年的学习情况
关于HDFS数据Checksum
彭帅 · 2009-09-25 · via 博客园 - 彭帅

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.