我是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