【问题标题】:File copying in java (cannot create file) by HadoopHadoop中的文件复制(无法创建文件)
【发布时间】:2018-10-12 03:13:25
【问题描述】:

我目前想将文件从 hdfs 复制到本地计算机。我已经通过fileinputstream 和fileoutputstream 完成了大部分工作。但是后来我遇到了以下问题。

JAVA I/O 异常。 Mkdirs 无法创建文件

我做了一些研究,发现我正在使用 filesystem.create()(hadoop 函数)

https://hadoop.apache.org/docs/current/api/org/apache/hadoop/fs/FileSystem.html#create(org.apache.hadoop.fs.Path,%20org.apache.hadoop.util.Progressable)

原因如下:

  1. 如果我将路径设置为不存在的文件夹,则会创建一个文件夹,我下载的文件就在其中。

  2. 如果我将路径设置为现有文件夹(例如当前目录),则会发生上述 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 -copyToLocal Java 代码?
  • Linux 还是 Windows?似乎是权限问题。
  • 是的,它只是做类似于 hdfs dfs -copyToLocal 的事情,它在 linux 上

标签: java hadoop


【解决方案1】:

在“文件”类中有一个方法叫做 createNewFile() 仅当一个文件不存在时才会创建一个新文件。

【讨论】:

    猜你喜欢
    • 2014-10-21
    • 1970-01-01
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    • 2023-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多