地图通话可以持续多久?

时间:2012-05-08 11:06:22

标签: google-app-engine mapreduce

我想在mapper的map()调用中做一些繁重的处理。 我正在浏览源文件MapReduceServlet.java:

// Amount of time to spend on actual map() calls per task execution.
public static final int PROCESSING_TIME_PER_TASK_MS = 10000;

这是否意味着,地图调用只能持续10秒。 10秒后会发生什么? 我可以将它增加到大数,如1分钟或10分钟。

-Aswath

1 个答案:

答案 0 :(得分:0)

使用Push Queues在任务中执行MapReduce操作,并且如documentation中所述,任务截止时间目前为10分钟(之后您将获得DeadlineExceededException)。

如果任务未能执行,默认情况下App Engine会重试该任务,直到成功为止。如果您需要更长的10分钟截止日期,则可以使用Backend来执行任务。

查看Worker.java中PROCESSING_TIME_PER_TASK_MS的实际用法,此值用于限制单个任务中完成的地图调用次数。

如果执行了每个map调用,如果从任务开始以来已超过10秒,它将生成一个新任务来处理其余的地图调用。

  1. Worker.scheduleWorker为每个给定的碎片生成一个新任务
  2. 每项任务都会调用Worker.processMapper
  3. processMapper执行1 map来电
  4. 如果从2开始经过了少于PROCESSING_TIME_PER_TASK_MS,请返回3.
  5. 如果处理未完成,则为reschedule a new worker task
  6. 在最糟糕的情况下,默认任务请求截止日期(10分钟)应适用于您的每个地图呼叫。