对两个不同的hadoop文件系统

时间:2016-03-13 00:56:54

标签: java hadoop hdfs checksum

我是Hadoop文件系统的新手。

我有两个不同的hadoop文件系统(一个是客户端,另一个是服务器),它们都在不同的域中,没有直接访问彼此。

我想将文件(以GB为单位)从服务器复制到客户端。

由于我没有直接访问服务器(来自客户端),我按照以下方法复制文件。

我编写了服务器java程序,它使用服务器配置读取文件并将其作为字节写入stdout。

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

然后,我写了一个调用这个服务器jar的cgi脚本。

然后,我编写了一个客户端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

你能帮我解决这个问题吗?

注意:我在客户端和服务器文件系统上使用相同的blockSize

0 个答案:

没有答案