两个不同hadoop文件系统上文件的java校验和验证

ccrfmcuu  于 2021-06-02  发布在  Hadoop
关注(0)|答案(0)|浏览(281)

我对hadoop文件系统非常陌生。
我有两个不同的hadoop文件系统(一个是client,另一个是server),它们都在不同的域中,不能直接访问彼此。
我想将文件(以gb为单位)从服务器复制到客户端。
因为我不能直接访问服务器(从客户端),所以我按照下面的方法来复制文件。
我编写了一个服务器java程序,它读取带有服务器配置的文件,并将其作为字节写入stdout。

System.out.write(buf.array(), 0, length);
System.out.flush();

然后,我编写了cgi脚本,它调用这个服务器jar。
然后,我编写了一个客户机java程序,调用上面的cgi脚本来读取数据

FSDataOutputStream dataOut = fs.create(client_file, true, bufSize, replica, blockSize);
URL url = new URL("http://xxx.company.com/cgi/my_cgi_script?" + "file=" + server_file);
InputStream is = url.openStream();
byte[] byteChunk = new byte[1024 * 1024];
int n = 0;
while ( (n = is.read(byteChunk)) > 0 ) {
    dataOut.write(byteChunk, 0, n);
    received += n;
}
dataOut.close();

现在,复制文件没有任何问题,我看到服务器和客户端上的文件大小相同。
当我在客户机和服务器文件系统上对同一个文件执行filechecksum时,得到的是不同的值。

MD5-of-262144MD5-of-512CRC32C:86094f4043b9592a49ec7f6ef157e0fe
MD5-of-262144MD5-of-512CRC32C:a83a0b3f182db066da7520b36c79e696

你能帮我解决这个问题吗?
注意:我在客户机和服务器文件系统上使用相同的块大小

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题