Hadoop HDFS 数据一致性

HDFS 会对写入的所有数据计算 校验和( checksum ) ,并在读取数据时 验证校验和 。针对指定字节的数目计算校验和。字节数默认是512 字节,可以通过 io.bytes.per.checksum 属性设置。通过CRC-32编码后为4字节。

Datanode 在保存数据前负责验证 checksum 。client 会把数据和校验和一起发送到一个由多个datanode 组成的队列中,最后一个Datanode 负责验证 checksum 。如果验证失败,会抛出一个ChecksumException。客户端需要处理这种异常。

客户端从datanode读取数据时,也会验证 checksum 。每个Datanode 都保存了一个 验证 checksum 的日志。每次客户端成功验证一个数据块后,都会告知datanode,datanode会更新日志。

每个datanode 也会在一个后台线程中运行一个 DataBlockScanner,定期验证这个 datanode 上的所有数据块。

在用   hadoop fs get  命令读取文件时,可以用   -ignoreCrc  忽略验证。如果是通过FileSystem API 读取时,可以通过 setVerify Checksum(false),忽略验证。

Hadoop 中的   LocalFileSystem  会进行客户端的检验和,写文件时,会在目录下创建一个名为   .filename.crc  的隐藏文件,如果想禁止校验和功能,可以用 RawLocalFileSystem  代替 LocalFileSystem  。
Configuration conf = ...
FileSystem fs = new RawLocalFileSystem();
fs.initialize(null, conf);
或者直接设置 fs.file.impl 属性为  org.apache. hadoop.fs.RawLocalFileSystem  这样会全局禁用 checksum  

LocalFileSystem 内部使用了   ChecksumFileSystem  完成 checksum 工作。通过  ChecksumFileSystem   可以添加校验和功能。
FileSystem rawFs = ...
FileSystem checksummedFs = new   ChecksumFileSystem(rawFs);



转载于:https://my.oschina.net/Yaland/blog/424913

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值