Hadoop中失败文件的重试处理

Posted

技术标签:

【中文标题】Hadoop中失败文件的重试处理【英文标题】:Retry processing of failed files in Hadoop 【发布时间】:2014-07-10 13:49:14 【问题描述】:

我有一个 Hadoop Map-Reduce 程序,它只是一个简单的文件处理代码。每个映射器都有一个文件作为输入。

我的 Reducer 部分是空的。所有工作都在 map() 方法中完成。

现在我面临的问题是——

如果映射器中的文件处理操作失败,我无法告诉我的 Hadoop 作业等待几秒钟,然后再从同一个失败的文件重试并继续前进。

有什么方法/配置可以这样指定吗?

如果有人遇到过这样的用例,请告诉我。

【问题讨论】:

为什么等待可以解决您在处理文件时遇到的问题?您是否进行 API 调用或类似的操作? 任务失败时是否报告失败? mapred.task.timeout 怎么样(如果任务既不读取输入,也不写入输出,也不更新其状态字符串,任务将被终止之前的毫秒数。) 【参考方案1】:

我认为您应该尝试根据您的逻辑使用多个输出将不良记录写入不同的文件。对于多个输出,您可以点击此链接:Multiple output link

如果您采用这种方法,您可以根据您在 map 方法中的逻辑过滤掉不良记录和良好记录,您的工作不会失败。使用多个输出,您可以将不良记录写入单独的文件并稍后对它们进行分析。使用这种方法,您可以确保您的工作不会因为不良记录而失败,并且您的良好记录得到正确处理。

您还可以查看此链接Counters to detect badrecord 以了解您实际拥有多少不良记录。我希望这会有所帮助

【讨论】:

以上是关于Hadoop中失败文件的重试处理的主要内容,如果未能解决你的问题,请参考以下文章

Google Cloud Pub/Sub 重试次数

微服务调用失败的处理方法

RocketMQ的消息重试

如果映射器在中途失败并且 Hadoop 重试该映射器,自定义计数器会发生啥

从gRPC的重试策略说起

PHP-RESQUE重试机制