0

我想在映射器的 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 分钟之类的大数字吗?

-阿斯瓦特

4

1 回答 1

0

MapReduce 操作是在使用Push Queues的任务中执行的,并且如文档中所述,任务截止日期当前为 10 分钟(之后您将获得一个限制DeadlineExceededException)。

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

查看Worker.java中 PROCESSING_TIME_PER_TASK_MS 的实际使用情况,该值用于限制单个任务中完成的 map 调用次数。

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

  1. Worker.scheduleWorker为每个给定的分片生成一个新任务
  2. 每个任务都会调用Worker.processMapper
  3. processMapper执行 1map次通话
  4. 如果自 2 以来经过的时间少于 PROCESSING_TIME_PER_TASK_MS。请返回 3。
  5. 否则,如果处理未完成,则重新安排新的工作任务

在最坏的情况下,默认任务请求截止日期(10 分钟)应适用于您的每个单独的地图调用。

于 2012-05-09T01:10:59.363 回答