【问题标题】:Zip different directories in hadoop using bash script使用 bash 脚本压缩 hadoop 中的不同目录
【发布时间】:2016-05-20 02:11:31
【问题描述】:

我在 hadoop 中有一个位置,其中有不同的目录,例如 dir1 dir2 等。我需要将这些不同的目录压缩为不同的 zip 文件。

我使用了下面的脚本,但是这不起作用。

for d in ${directory_to_move_files}/*/ ;

do
    echo "$d" ;
//zip the folders printed in echo

done

有人能指出正确的做法吗?

【问题讨论】:

  • 它与hadoop无关(你能删除hadoop标签吗)。它的简单外壳脚本。请。看我的回答:)
  • 我需要在hadoop中使用shell,所以添加了。
  • 好的。但是在这种情况下,您是否使用 hadoop fs -coptolocal 复制 hadoop 文件夹?
  • 我正在查看答案。实际上该位置在 hadoop 中,我需要压缩该位置的所有目录,例如 /abc/def/pqr/ 我需要压缩该位置的不同目录像 dir1 , dir2
  • 所以这个压缩在hadoop环境下不起作用?

标签: bash hadoop zip hdfs


【解决方案1】:

简单的解决方案是使用 hadoop fs -copyToLocal 转到要执行的本地 linux 文件夹的父目录,并通过保存在 shell 脚本中执行以下操作 看FileSystem 命令reference

#!/bin/bash
for eachindex in */; do zip -r "${eachindex%/}.zip" "$eachindex"; done

据我了解,您的问题具有深刻的洞察力(不仅仅是 unix bash 命令和 shell 脚本),并且您只想在 hadoop 环境中使用 zip 进行压缩,而不是将其复制到本地 unix/linux 文件系统。

我对此进行了研究,发现的唯一方法是使用FUSE aka (Filesystem in Userspace) interface into HDFS 另见MountableHDFS

我不知道它对你来说可行多远。在我们的实现中,我通过将 hdfs 文件复制到本地文件系统并执行 shell 脚本来完成。

【讨论】:

  • 我已经使用 cd 到要压缩的目录的位置,否则 zip 命令会解压缩不需要的目录
  • 如果你对答案没问题,你也可以投票吗?
【解决方案2】:
find ${directory_to_move_files}/* -maxdepth 1 -type d -exec zip -r {}.zip {} \;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多