【问题标题】:HDFS to HDFS move files force fullyHDFS 到 HDFS 移动文件强制完全
【发布时间】:2018-01-11 18:49:54
【问题描述】:

据我所知,在从一个 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 文件,但出于某种原因我不想这样做。任何其他使用单个命令的方法都将得到应用。

提前致谢!!

【问题讨论】:

  • Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Super UserUnix & Linux Stack Exchange 会是一个更好的提问地点。
  • 这个问题和Hadoop有关,我还能在超级用户和Unix & Linux Stack Exchange里问吗?谢谢
  • 仅供参考...hdfs dfs -cp -f 也不是原子操作...在内部它调用删除后跟一个副本。所以......它并不比两个命令解决方案更好。
  • 你有没有为hdfs dfs -mv找到“强制”解决方案?
  • @Petro 我还没有找到解决方案,暂时使用解决方法。

标签: hadoop hdfs cloudera


【解决方案1】:

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

为了在 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

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

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

【讨论】:

    【解决方案2】:

    HDFS shell 命令不支持-f 用于mv

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

    【讨论】:

      【解决方案3】:

      没有办法在一个类似的命令中做到这一点

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

      将在一行中实现这一点。

      【讨论】:

      • 谢谢,但删除和移动是一回事。我在不同的意义上提到了一个命令。
      • 好的,谢谢,NIFI 对此很有用,但还是很烦人
      猜你喜欢
      • 1970-01-01
      • 2019-11-14
      • 1970-01-01
      • 2018-10-01
      • 2020-03-23
      • 2013-05-29
      • 1970-01-01
      • 2017-07-04
      相关资源
      最近更新 更多