HDFS的数据完整性

1.上传数据时,客户端会负责将数据和校验和发送给datanode,最后一个datanode负责对数据进行校验,如果存在错误,则客户端会抛出异常:

 2.下载数据时,客户端会从datanode下载校验和,然后对数据进行校验,如果存在错误,client会将数据报告给namenode,然后如果不存在错误,客户端会将数据报告给datanode,datanode会由此更新日志(datanode持久保存用于验证的校验和日志)

 

文本的校验和设置:

        在用Java代码进行操作时,通过fs.setVerifyChecksum()方法进行设置。

import java.net.URI;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
public class test1 {
	public static void main(String[] args) throws Exception {
		Configuration conf=new Configuration();
		URI uri=new URI("hdfs://192.168.137.128:8020");
		FileSystem fs=FileSystem.get(uri, conf, "root");
		//禁用校验和验证
		fs.setVerifyChecksum(false);
	}
}

 

如果用命令时,通过hadoop -get -ignoreCrc()方法设置

hadoop dfs -get -ignoreCrc /fileName path
//等价的
hadoop dfs -copyToLocal /filname    path

对数据的检测:

hdfs dfs -checksum file

 

 

这可用于检测HDFS中两个文件的内容是否相同,hadoop distcp 也具有类似功能

 


版权声明:本文为qq_36055407原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。