处理Hadoop中/蜂巢损坏的gzip文件(handle corrupted gzip files

2019-10-18 20:05发布


我有含有大量的文本文件HDFS很多的tar.gz文件夹日报。
发现其中若干的tar.gz的被破坏,并导致蜂巢/ MapReduce作业用的“流意外结束”崩溃处理这些文件时。

我确定那几个和用tar -zxvf对它们进行测试。 他们确实退出有错误,但仍解压缩文件的体面数出现这种情况了。

有没有办法阻止蜂巢/ MapReduce作业时,焦油/ GZ文件已损坏简单地崩溃? 我测试过一些错误跳跃和宽容失败的参数,如
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的每一个文件只是重新压缩他们aftewards(弄干净的gzip文件),然后上传到HDFS会是这样一个痛苦的过程(因为额外的步骤和大容量,这将产生数据的)

是否有一个更清洁/更优雅的解决方案,有人发现了什么?

谢谢你的帮助。

Answer 1:

我超级晚在这里聚会,但我只是面临着腐败的gzip文件这个确切的问题。 我结束了写我自己解决它RecordReader这会赶上IOExceptions ,日志有问题的文件的名称,然后优雅地丢弃文件,并移动到下一个。

我已经写了一些细节(包括自定义代码Record Reader在这里: http://daynebatten.com/2016/03/dealing-with-corrupt-or-blank-files-in-hadoop/



Answer 2:

我看主要有两个出路:

  1. 创建Hadoop的一个补丁,允许这类的损坏文件的处理,然后只需运行针对已损坏的文件的应用程序。
  2. 您创建一个使用自己定制的“gunzip解”执行(即可以处理这类问题)的特殊的Hadoop应用程序。 此应用程序然后只需读取和写入文件的映射唯一的工作(身份映射)。 那么这个作业的输出作为输入你的正常的MapReduce /头/蜂巢/ ...工作。


文章来源: handle corrupted gzip files in hadoop / hive