使用Java API在Hadoop中移动文件?

Wan*_*rer 17 java hadoop hdfs

我想使用Java API在HDFS中移动文件.我无法想办法做到这一点.FileSystem类似乎只允许允许移入和移出本地文件系统..但我想将它们保存在HDFS中并将它们移动到那里.

我错过了什么基本的东西?我可以想象的唯一方法是从输入流中读取它并将其写回...然后删除旧副本(yuck).

谢谢

baj*_*ife 22

使用FileSystem.rename():

public abstract boolean rename(Path src, Path dst) throws IOException
Run Code Online (Sandbox Code Playgroud)

重命名路径src路径dst.可以在本地fs或远程DFS上进行.

参数:
src - 要
dst重命名的路径 - 重命名后的新路径
返回:
true如果重命名成功
抛出:
IOException - 失败时


小智 6

java.nio.* 方法可能并不总是适用于 HDFS。所以找到了以下有效的解决方案。

使用 org.apache.hadoop.fs.FileUtil.copy API 将文件从一个目录移动到另一个目录

val fs = FileSystem.get(new Configuration())
        val conf = new org.apache.hadoop.conf.Configuration()
        val srcFs = FileSystem.get(new org.apache.hadoop.conf.Configuration())
        val dstFs = FileSystem.get(new org.apache.hadoop.conf.Configuration())
        val dstPath = new org.apache.hadoop.fs.Path(DEST_FILE_DIR)

        for (file <- fileList) {
          // The 5th parameter indicates whether source should be deleted or not
          FileUtil.copy(srcFs, file, dstFs, dstPath, true, conf)
Run Code Online (Sandbox Code Playgroud)