我有每日文件夹,包含大量文本文件的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>
有人找到了更干净/更优雅的解决方案吗?
感谢您的帮助。
答案 0 :(得分:1)
我来这里的派对已经很晚了,但我刚刚面对腐败的gzip文件这个问题。我最后通过编写自己的RecordReader
来解决它,它会捕获IOExceptions
,记录有问题的文件的名称,然后优雅地丢弃该文件并转到下一个文件。
我已在此处写了一些详细信息(包括自定义Record Reader
的代码:http://daynebatten.com/2016/03/dealing-with-corrupt-or-blank-files-in-hadoop/
答案 1 :(得分:0)
我基本上看到了两种方法: