如何将 Hadoop 目录压缩为单个 gzip 文件?
Posted
技术标签:
【中文标题】如何将 Hadoop 目录压缩为单个 gzip 文件?【英文标题】:How to compress Hadoop directory to single gzip file? 【发布时间】:2017-05-29 14:00:17 【问题描述】:我有一个目录,其中包含许多我想从 hdfs 压缩和导出到 fs 的文件和子目录。
我遇到了这个问题 - Hadoop: compress file in HDFS? ,但它似乎只与文件相关,并且使用 hadoop-streaming 和 GzipCodec 没有让我在目录方面取得成功。
为什么将 HDFS 文件夹压缩为单个 gzip 文件最有效的方法是什么? 提前致谢。
【问题讨论】:
即使在 Unix 的 FS 上,你也不能gzip
一个目录。您需要先将其转换为tar/har
或类似的名称,然后执行压缩。
@philantrovert 当然可以,但是您对如何操作有什么建议吗?
我建议使用 apache commons Api 编写一个 Java 程序。它有像TarArchiveOutputStream
这样的类,你可以查看它们。
【参考方案1】:
您将需要一个库或滚动您自己的代码来将目录结构中的文件制作成 tar 流。您可以使用 zlib 压缩 tar 流以制作标准的 .tar.gz 文件。
如果您想合并多个此类任务的结果,我可以在此处提供的两个花絮是:1)您可以连接 gzip 流以生成有效的 gzip 流,以及 2)您可以连接 tar 流以生成有效的 tar 流如果您从非最终 tar 流中删除最后的 1024 个零字节。
【讨论】:
【参考方案2】:对于那些不想使用 hadoop-streaming 或任何 MapReduce 作业的人来说,对于一个快速而肮脏的解决方案,我使用了FUSE,然后将其作为传统文件系统执行操作。 请注意,您可能不想将其用作永久解决方案,只是为了快速获胜:) 延伸阅读: * https://hadoop.apache.org/docs/r1.2.1/streaming.html * http://www.javased.com/index.php?api=org.apache.hadoop.io.compress.GzipCodec
【讨论】:
以上是关于如何将 Hadoop 目录压缩为单个 gzip 文件?的主要内容,如果未能解决你的问题,请参考以下文章