使用Java API在Hadoop中移动文件?
我想使用Java API在HDFS中移动文件。我想不出一种方法来做到这一点。FileSystem 类似乎只想允许在本地文件系统之间来回移动。但我想将它们保留在HDFS中并将它们移动到那里。
我错过了一些基本的东西吗?我能想到的唯一方法是从输入流中读取它并将其写回...,然后删除旧副本(哎呀)。
谢谢
我想使用Java API在HDFS中移动文件。我想不出一种方法来做到这一点。FileSystem 类似乎只想允许在本地文件系统之间来回移动。但我想将它们保留在HDFS中并将它们移动到那里。
我错过了一些基本的东西吗?我能想到的唯一方法是从输入流中读取它并将其写回...,然后删除旧副本(哎呀)。
谢谢
public abstract boolean rename(Path src, Path dst) throws IOException
将路径重命名为 路径 。可以在本地 fs 或远程 DFS 上进行。
src
dst
参数:
- 要重命名的
路径 - 重命名
后的新路径 返回:
如果重命名成功
则抛出:
IOException - 失败时src
dst
true
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)