在 hadoop / hive 中处理损坏的 gzip 文件
Posted
技术标签:
【中文标题】在 hadoop / hive 中处理损坏的 gzip 文件【英文标题】:handle corrupted gzip files in hadoop / hive 【发布时间】:2013-10-22 16:46:03 【问题描述】:我在 HDFS 上有很多包含大量文本文件的 tar.gz 文件的日常文件夹。 其中一些 tar.gz 被发现已损坏,并导致 hive/mapreduce 作业在处理这些文件时因“意外的流结束”而崩溃。
我确定了其中的一些并使用 tar -zxvf 对其进行了测试。他们确实以错误退出,但在此之前仍会提取相当数量的文件。
有没有办法在 tar/gz 文件损坏时停止 hive/mapreduce 作业以简单地崩溃? 我已经测试了一些错误跳过和容错参数,例如 mapred.skip.attempts.to.start.skipping, mapred.skip.map.max.skip.records, mapred.skip.mode.enabled, mapred.map.max.attempts, mapred.max.map.failures.percent, mapreduce.map.failures.maxpercent.
它在少数情况下有助于处理完整的文件夹而不会崩溃,但大多数情况下这会导致作业挂起并且根本无法完成。
解压缩hadoop外部的每个文件只是为了在之后重新压缩它们(以获得干净的gzip文件)然后再次上传到hdfs将是一个非常痛苦的过程(因为额外的步骤和大量的数据会产生)
是否有人找到了更清洁/更优雅的解决方案?
感谢您的帮助。
【问题讨论】:
【参考方案1】:我在这里聚会非常迟到,但我刚刚遇到了 gzip 文件损坏的确切问题。我最终通过编写自己的 RecordReader
来解决它,它会捕获 IOExceptions
,记录有问题的文件的名称,然后优雅地丢弃该文件并继续下一个。
我已经写了一些细节(包括自定义 Record Reader
的代码:http://daynebatten.com/2016/03/dealing-with-corrupt-or-blank-files-in-hadoop/
【讨论】:
感谢分享!这很方便,不会让大象惨倒在一个狡猾的球上:p我会尽快尝试【参考方案2】:我基本上看到了两条出路:
-
您为 Hadoop 创建了一个补丁,允许对损坏的文件进行这种处理,然后简单地针对损坏的文件运行应用程序。
您创建了一个特殊的 hadoop 应用程序,该应用程序使用您自己的自定义“gunzip”实现(可以处理这类问题)。然后,此应用程序仅作为映射器作业(身份映射器)读取和写入文件。然后将此作业的输出用作常规 mapreduce/pig/hive/... 作业的输入。
【讨论】:
以上是关于在 hadoop / hive 中处理损坏的 gzip 文件的主要内容,如果未能解决你的问题,请参考以下文章