概述
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);
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);
FileSystem checksummedFs = new ChecksumFileSystem(rawFs);
最后
以上就是开心蓝天为你收集整理的Hadoop HDFS 数据一致性的全部内容,希望文章能够帮你解决Hadoop HDFS 数据一致性所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复