我在hdfs上有很多tar.gz文件的日常文件夹,其中包含大量文本文件。
许多tar.gz被发现已损坏,并导致hive/mapreduce作业在处理这些文件时崩溃,出现“意外的流结束”。
我确定了其中一些,并用tar-zxvf测试了它们。它们确实会带着错误退出,但仍然会在此之前提取相当数量的文件。
有没有办法阻止hive/mapreduce作业在tar/gz文件损坏时崩溃?我测试了一些跳过错误和容错参数,例如
mapred.skip.attempts.to.start.skipping,
mapred.skip.map.max.skip.records记录,
mapred.skip.mode.enabled,
mapred.map.max.尝试次数,
mapred.max.map.failures.percent,
mapreduce.map.failures.maxpercent。
在少数情况下,它有助于在不崩溃的情况下处理完整的文件夹,但主要是这会导致作业挂起而根本无法完成。
解压缩hadoop之外的每个文件只是为了在下载后重新压缩它们(以获得干净的gzip文件),然后再次上传到hdfs将是一个非常痛苦的过程(因为这将产生额外的步骤和大量的数据)
有人找到了更干净/更优雅的解决方案吗?
谢谢你的帮助。
2条答案
按热度按时间btxsgosb1#
我基本上看到了两条出路:
您为hadoop创建了一个补丁,允许对损坏的文件进行这种处理,然后针对损坏的文件运行应用程序。
您可以创建一个特殊的hadoop应用程序,它使用您自己定制的gunzip实现(可以处理这些类型的问题)。然后,该应用程序只需将文件作为仅Map器作业(标识Map器)进行读写。然后,此作业的输出将用作普通mapreduce/pig/hive/的输入。。。工作。
rkttyhzu2#
我来这里的聚会迟到了,但我刚刚遇到了gzip文件损坏的问题。最后我自己写了一本书解决了这个问题
RecordReader
哪一个会吸引人IOExceptions
,记录出现问题的文件的名称,然后优雅地放弃该文件并转到下一个文件。我已经写了一些细节(包括定制的代码)
Record Reader
在这里:http://daynebatten.com/2016/03/dealing-with-corrupt-or-blank-files-in-hadoop/