【发布时间】:2018-10-12 03:13:25
【问题描述】:
我目前想将文件从 hdfs 复制到本地计算机。我已经通过fileinputstream 和fileoutputstream 完成了大部分工作。但是后来我遇到了以下问题。
JAVA I/O 异常。 Mkdirs 无法创建文件
我做了一些研究,发现我正在使用 filesystem.create()(hadoop 函数)
原因如下:
如果我将路径设置为不存在的文件夹,则会创建一个文件夹,我下载的文件就在其中。
如果我将路径设置为现有文件夹(例如当前目录),则会发生上述 I/O 异常。
如果我已经获得了正确的路径和文件输入流,我应该使用什么(在文件系统库中更好)来解决这个问题
我的代码
//src and dst are the path input and output
Configuration conf = new Configuration();
FileSystem inFS = FileSystem.get(URI.create(src), conf);
FileSystem outFS = FileSystem.get(URI.create(dst), conf);
FSDataInputStream in = null;
FSDataOutputStream out = null;
in = inFS.open(new Path(src));
out = outFS.create(new Path(dst),
new Progressable() {
/*
* Print a dot whenever 64 KB of data has been written to
* the datanode pipeline.
*/
public void progress() {
System.out.print(".");
}
});
【问题讨论】:
-
请包含您的代码
-
在获得许可的情况下也请注意。由于用户、组和文件夹权限,我在系统中创建文件时经常会遇到很多问题。
-
所以你要重写
hdfs dfs -copyToLocalJava 代码? -
Linux 还是 Windows?似乎是权限问题。
-
是的,它只是做类似于 hdfs dfs -copyToLocal 的事情,它在 linux 上