如何强制Hadoop解压缩输入而不考虑其扩展



我正在运行map-reduce,我的输入是gzip的,但没有.gz(文件名(扩展名。

通常,当它们确实具有.gz扩展时,Hadoop会负责在将它们传递给映射器之前即时解压缩它们。但是,如果没有扩展,它就不会这样做。我无法重命名我的文件,所以我需要某种"强制"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.GzipCodec"]

但是,映射器的输入仍处于解压缩状态。我通过在映射器代码中打印映射器的输入来验证这一点:

映射器输入:^_^@%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?OF4??-^Z^X4;????f?呵呵???^Z?Q??4#^W?我?^F??^]?f+???f0d??一个??v?A3*????7?x?p??7?唔?。g??{^FL?g?^Y+?6??我????^V?C??我??$??ESCVd(K??}?Z??j?,3?{ ?}v???j???^??"?.??^L?^?LX^F??p???

任何关于如何即时解压缩的建议将不胜感激!

谢谢!吉尔。

您需要修改 LineRecordReader 类的源代码以修改它选择压缩编解码器的方式。默认版本创建一个 Hadoop CompressionCodecFactory并调用 getCodec 来解析其扩展名的文件路径。您可以改为使用 getCodecByClassName 来获取所需的任何编解码器。

然后,您需要重写输入格式类,使其使用新的记录读取器。详情请见:http://daynebatten.com/2015/11/override-hadoop-compression-codec-file-extension/

相关内容

  • 没有找到相关文章

最新更新