【问题标题】:How to force Hadoop to unzip inputs regadless of their extension?无论扩展名如何,如何强制 Hadoop 解压缩输入?
【发布时间】:2015-08-12 15:02:48
【问题描述】:

我正在运行 map-reduce,我的输入被压缩,但没有 .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?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??j?,3?{ ?}v???j???^??"?.??^L?^? LX^F??p???

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

谢谢! 吉尔。

【问题讨论】:

  • 你有没有想过这个问题?
  • 我也对这个感兴趣...

标签: hadoop mapreduce emr elastic-map-reduce amazon-emr


【解决方案1】:

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

然后您需要覆盖您的输入格式类以使其使用您的新记录阅读器。详情在这里:http://daynebatten.com/2015/11/override-hadoop-compression-codec-file-extension/

【讨论】:

    猜你喜欢
    • 2023-03-09
    • 2014-07-28
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    • 2014-06-20
    • 1970-01-01
    • 2016-05-06
    相关资源
    最近更新 更多