如何强制hadoop在没有扩展的情况下解压输入?

c3frrgcw  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(329)

我正在运行map reduce,输入是gzip的,但没有.gz(文件名)扩展名。
通常,当它们有.gz扩展名时,hadoop会在将它们传递给Map器之前动态地解压缩它们。但是,如果没有扩展,它就不会这样做。我不能重命名我的文件,所以我需要一些“强制”hadoop解压它们的方法,即使它们没有.gz扩展名。
我尝试将以下标志传递给hadoop:
step_args=[“-jobconf”,“stream.recordreader.compression=gzip”,“-jobconf”,“mapred.output.compress=true”,“-jobconf”,“mapred.output.compression.type=block”,“-jobconf”,“mapred.output.compression.codec=org.apache.hadoop.io.compress.gzicodec”]
但是,Map器的输入仍然是解压缩的。我通过在Map器代码中向Map器打印输入来验证:
Map器输入:^ ^@%r?t^b??\k?6 ^r?+f?3 ^d?b?^r,??!???a?x?a?n?m?k?3id?o?z[?-?l2yt ^p$n?t,^v??^ y??^ o?r?nno>}^b ^e ^n-7?^z?'?i?of 4??-^z ^x4;????f?rh??^z?q?^4#?w?i?^f??^]?f+???f0d?a?v?a3*???7?x?p?7?mq?.g??{^fl?g?^y+?6?i??^v?c?i??$?escvd)k??}?z??,3?{?}v???j??^??。^l?^?lx?f?p???
任何关于如何在飞行中解压缩的建议将不胜感激!
谢谢!吉尔。

ocebsuys

ocebsuys1#

您需要修改 LineRecordReader 类来修改它选择压缩编解码器的方式。默认版本创建一个hadoop CompressionCodecFactory 还有电话 getCodec 解析文件路径的扩展名。你可以用 getCodecByClassName 获取所需的任何编解码器。
然后需要重写输入格式类,使其使用新的记录读取器。详情如下:http://daynebatten.com/2015/11/override-hadoop-compression-codec-file-extension/

相关问题