-1

我有一个 MapReduce 作业,我使用job.waitForCompletion(true). 如果一个/多个 reducer 任务在作业执行期间被杀死或崩溃,则整个 MapReduce 作业将重新启动,并且映射器和 reducer 将再次执行(文档)。以下是我的问题:

1] 我们能否在作业开始时知道作业是重新开始还是由于上一次运行中的某些故障而重新启动?(这使我进入了第二季度)

2] 计数器可以提供帮助吗?如果某些任务失败,计数器的值是否会被保留,从而导致整个作业重新启动?

3] Hadoop 是否提供任何内置检查点方法来跟踪先前的计算并帮助避免在失败/崩溃之前执行映射器和化简器完成的相同计算?

抱歉,如果问题的措辞不清楚。谢谢您的帮助。

4

1 回答 1

2
  1. 对术语的一些更正。如果一项或多项任务失败,则作业不会重新启动。任务可能会重新启动。从映射器/减速器上下文中,您可以获得https://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapreduce/TaskAttemptContext.html#getTaskAttemptID(),其中包含作为最后一个标记的尝试编号身份证。

  2. 来自失败任务尝试的计数器更新不会汇总到作业总数中,因此不必担心过度计数。

  3. 一般不会。框架清除失败任务的输出。如果您因为任务失败而害怕丢失计算成本高昂的东西,我建议您将您的工作分成多个 map/reduce 阶段。您也可以拥有自己的可变分布式缓存,但也不建议这样做。

于 2016-06-24T01:05:22.813 回答