我有一个目录,其中包含大量的文件和子目录,我想压缩并从hdfs导出到fs。如何将Hadoop目录压缩到单个gzip文件?
我遇到了这个问题 - Hadoop: compress file in HDFS? ,但现在看来似乎是只与文件,并使用Hadoop的流媒体和GzipCodec给了我目录没有成功。
为什么要将HDFS文件夹压缩到单个gzip文件最有效?
在此先感谢。
我有一个目录,其中包含大量的文件和子目录,我想压缩并从hdfs导出到fs。如何将Hadoop目录压缩到单个gzip文件?
我遇到了这个问题 - Hadoop: compress file in HDFS? ,但现在看来似乎是只与文件,并使用Hadoop的流媒体和GzipCodec给了我目录没有成功。
为什么要将HDFS文件夹压缩到单个gzip文件最有效?
在此先感谢。
对于一个快速的,肮脏的解决方案,对于那些你不想使用Hadoop的流媒体或任何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
您将需要一个库或滚动您自己的代码来制作目录结构中的文件中的tar流。您可以使用zlib压缩焦油流以制作标准的.tar.gz文件。
如果你想合并多个这样的任务的结果,我可以在这里提供的两个小技巧是:1)你可以连接gzip流以生成有效的gzip流; 2)你可以连接tar流来生成一个有效的tar流如果您从非最终tar流删除最后的1024个零字节。
你不能'gzip'答:你可能不希望以此作为一个永久性的解决方案,只为速赢:)
延伸阅读
讲究目录,即使在Unix的FS上。你需要先将它转换成'tar/har'或类似的东西然后执行压缩。 – philantrovert
@philantrovert当然,但你有什么建议如何做? –
我会建议使用apache commons Api编写一个Java程序。它有像TarArchiveOutputStream这样的类,你可以查看它。 – philantrovert