2

我忘记了要调用什么 API/方法,但我的问题是:

我的映射器将运行超过 10 分钟 - 我不想增加默认超时。

相反,我想让我的映射器将更新 ping 发送到任务跟踪器,当它位于消耗时间 > 10 分钟的特定代码路径中时。

请让我知道要调用什么 API/方法。

4

2 回答 2

6

您可以简单地增加一个计数器并调用progress。这将确保任务将心跳发送回 tasktracker 以了解其是否还活着。

在新 API 中,这是通过上下文管理的,请参见此处:http ://hadoop.apache.org/common/docs/r1.0.0/api/index.html

例如

@Override
protected void map(LongWritable key, Text value, Context context)
  throws IOException, InterruptedException {
    // increment counter
    context.getCounter(SOME_ENUM).increment(1);
    context.progress();
}

在旧 API 中有记者类: http ://hadoop.apache.org/common/docs/current/api/org/apache/hadoop/mapred/Reporter.html

于 2012-08-05T10:49:50.103 回答
1

您通常使用Reporter让框架知道您还活着。

从javadoc引用:

Mapper 和 Reducer 可以使用提供的 Reporter 来报告进度或仅表明它们处于活动状态。在应用程序花费少量时间来处理单个键/值对的情况下,这一点至关重要,因为框架可能会假设任务已超时并终止该任务。

于 2012-08-05T07:59:43.027 回答