据我所知,在从一个HDFS位置移动到另一个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文件,但出于某种原因我不想这样做。使用单个命令的任何其他方法都将适用。
提前感谢!!
答案 0 :(得分: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
第一行递归选择目标中的所有文件。然后,将创建目标中每个文件的路径,并最终移动文件。
缺点是文件夹访问权限不会移动,而是在运行时设置。
答案 1 :(得分:0)
HDFS Shell命令不支持-f
的{{1}}。
您将必须执行复制然后删除方法(如您所述)。
答案 2 :(得分:-3)
无法在单个命令中执行此操作,例如
hdfs dfs -rm {destination Uri}; hdfs dfs -mv {source Uri} {destination Uri}
将在一条线上实现这一目标。