gpt4 book ai didi

java - HDFS 文件校验和

转载 作者:可可西里 更新时间:2023-11-01 14:14:43 24 4
gpt4 key购买 nike

我正在尝试使用 Hadoop API - DFSCleint.getFileChecksum() 来检查文件复制到 HDFS 后的一致性。

我得到以上代码的以下输出:

Null
HDFS : null
Local : null

谁能指出错误或错误?这是代码:

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileChecksum;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.LocalFileSystem;
import org.apache.hadoop.fs.Path;


public class fileCheckSum {

/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub

Configuration conf = new Configuration();

FileSystem hadoopFS = FileSystem.get(conf);
// Path hdfsPath = new Path("/derby.log");

LocalFileSystem localFS = LocalFileSystem.getLocal(conf);
// Path localPath = new Path("file:///home/ubuntu/derby.log");


// System.out.println("HDFS PATH : "+hdfsPath.getName());
// System.out.println("Local PATH : "+localPath.getName());

FileChecksum hdfsChecksum = hadoopFS.getFileChecksum(new Path("/derby.log"));
FileChecksum localChecksum = localFS.getFileChecksum(new Path("file:///home/ubuntu/derby.log"));


if(null!=hdfsChecksum || null!=localChecksum){
System.out.println("HDFS Checksum : "+hdfsChecksum.toString()+"\t"+hdfsChecksum.getLength());
System.out.println("Local Checksum : "+localChecksum.toString()+"\t"+localChecksum.getLength());

if(hdfsChecksum.toString().equals(localChecksum.toString())){
System.out.println("Equal");
}else{
System.out.println("UnEqual");

}
}else{
System.out.println("Null");
System.out.println("HDFS : "+hdfsChecksum);
System.out.println("Local : "+localChecksum);

}

}

}

最佳答案

由于您没有在 conf 上设置远程地址并且基本上使用相同的配置,因此 hadoopFSlocalFS 都指向LocalFileSystem 的实例。

getFileChecksum 未针对 LocalFileSystem 实现并返回 null。不过,它应该适用于 DistributedFileSystem,如果您的 conf 指向分布式集群,FileSystem.get(conf) 应该返回一个实例返回 MD5 of MD5 of CRC32 checksumsDistributedFileSystem大小为 bytes.per.checksum 的 block 。该值取决于 block 大小和集群范围的配置 bytes.per.checksum。这就是为什么这两个参数也被编码在分布式校验和的返回值中作为算法的名称:MD5-of-xxxMD5-of-yyyCRC32 其中 xxx 是每个 block 的 CRC 校验和数,yyy 是 字节。 per.checksum 参数。

getFileChecksum 并不是为了在文件系统之间进行比较而设计的。尽管可以在本地模拟分布式校验和,或手工制作 map-reduce 作业来计算本地哈希的等价物,但我建议依赖 Hadoop 自己的完整性检查,当文件写入 Hadoop 或从 Hadoop 读取文件时会发生这种检查

关于java - HDFS 文件校验和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14563245/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com