处理hadoop / hive中损坏的gzip文件

时间:2013-10-22 16:46:04

标签: hadoop error-handling hive corrupt


我有每日文件夹,包含大量文本文件的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将是一个非常痛苦的过程(因为额外的步骤和这将产生大量的数据)< / p>

有人找到了更干净/更优雅的解决方案吗?

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

我来这里的派对已经很晚了,但我刚刚面对腐败的gzip文件这个问题。我最后通过编写自己的RecordReader来解决它,它会捕获IOExceptions,记录有问题的文件的名称,然后优雅地丢弃该文件并转到下一个文件。

我已在此处写了一些详细信息(包括自定义Record Reader的代码:http://daynebatten.com/2016/03/dealing-with-corrupt-or-blank-files-in-hadoop/

答案 1 :(得分:0)

我基本上看到了两种方法:

  1. 您为Hadoop创建了一个补丁,允许对损坏的文件进行这种处理,然后只针对损坏的文件运行应用程序。
  2. 您创建了一个特殊的hadoop应用程序,它使用您自己的自定义“gunzip”实现(可以处理这些类型的问题)。然后,此应用程序只读取和写入文件作为仅映射器作业(身份映射器)。然后,此作业的输出将用作正常mapreduce / pig / hive / ...作业的输入。