HDFS 到 HDFS 完全强制移动文件

问题描述 投票:0回答:3

据我所知,在从一个 HDFS 位置移动到另一个位置时,没有直接的选项可以覆盖 HDFS 中的文件,复制

cp
可以选择强制。我正在尝试查找是否有任何黑客可以做到这一点?

我们能做的是

hdfs dfs -cp -f /hdfs/location1 /hdfs/location2
但不是
hdfs dfs -mv -f /hdfs/location1/ /hdfs/location2/

实现我的目的的一种方法是先执行

hdfs dfs -cp -f /hdfs/location1 /hdfs/location2
,然后使用
hdfs dfs -rm -r /hdfs/location1
删除location1文件,但出于某种原因我不想这样做。任何其他使用单个命令的方法都将适用。

提前致谢!

hadoop hdfs cloudera
3个回答
0
投票

不是一个命令,而是一个解决方法:

为了合并 HDFS 中的文件夹,我为此实现了一个解决方案,因为 cp 与数据节点上的物理数据交互,而 mv 仅更改名称节点上的元数据。

for i in $(hdfs dfs -ls -R ${hdfs_src_dir} | grep "^-" | awk '{print $8}'); do
  i_dir=$(dirname "${i}")
  target_dir=${hdfs_tgt_dir}${i_dir#"$hdfs_src_dir"}
  hdfs dfs -mkdir -p $target_dir
  hdfs dfs -mv ${i} "${target_dir}"/ 2>&1
done

第一行递归选择目标中的所有文件。然后创建目标中每个文件的路径并最终移动文件。

一个缺点是文件夹访问权限不会移动,而是在运行时设置。


0
投票

HDFS shell 命令不支持

-f
表示
mv

您必须执行复制然后删除的方法(如您所述)。


-4
投票

无法通过类似的单个命令来执行此操作

hdfs dfs -rm {目标 Uri} ; hdfs dfs -mv {源 Uri} {目标 Uri}

只需一行即可实现此目的。

© www.soinside.com 2019 - 2024. All rights reserved.