我正在使用 Amazon Elastic MapReduce 处理一些上传到 S3 的日志文件。
日志文件每天使用 S3 从服务器上传,但似乎有些在传输过程中被损坏。这会导致java.io.IOException: IO error in map input file
异常。
有没有办法让hadoop跳过坏文件?
我正在使用 Amazon Elastic MapReduce 处理一些上传到 S3 的日志文件。
日志文件每天使用 S3 从服务器上传,但似乎有些在传输过程中被损坏。这会导致java.io.IOException: IO error in map input file
异常。
有没有办法让hadoop跳过坏文件?
您可以使用一堆记录跳过配置属性来执行此操作 - 请参阅http://hadoop.apache.org/docs/r1.2.1/mapred-default.htmlmapred.skip.
上的前缀属性
还有一个关于这个主题和这些配置属性的不错的博客文章:
也就是说,如果您的文件完全损坏(即在第一个记录之前损坏),即使使用这些属性,您可能仍然存在问题。
Chris White 的评论建议自己编写RecordReader
,并且InputFormat
完全正确。我最近遇到了这个问题,并且能够通过捕获这些类中的文件异常、记录它们,然后继续处理下一个文件来解决它。
我在这里写了一些细节(包括完整的 Java 源代码):http: //daynebatten.com/2016/03/dealing-with-corrupt-or-blank-files-in-hadoop/