如何知道MapReduce作业是重新启动还是重新开始?

时间:2016-06-24 00:00:05

标签: java hadoop mapreduce crash-recovery

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

1]我们可以在作业开始时知道作业是否已经重新启动,或者由于前一次运行中的某些故障而重新启动? (这导致我进入Q2)

2]专柜有帮助吗?如果某些任务失败,计数器的值是否会被转移,从而导致重新启动整个作业?

3] Hadoop是否提供了内置的检查点方法,它跟踪先前的计算并避免在失败/崩溃之前执行由映射器和缩减器完成的相同计算?

很抱歉,如果问题没有明确表达。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

  1. 对术语进行了一些修正。如果一个或多个任务失败,作业不会重新启动。任务可能会重新启动。从mapper / reducer上下文中,您可以获得https://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapreduce/TaskAttemptContext.html#getTaskAttemptID(),其中包含尝试号作为id的最后一个标记。

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

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