【问题标题】:how long the map call can last?地图通话可以持续多长时间?
【发布时间】:2012-05-08 11:06:22
【问题描述】:

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

-阿斯瓦特

【问题讨论】:

    标签: google-app-engine mapreduce


    【解决方案1】:

    MapReduce 操作是在使用Push Queues 的任务中执行的,正如documentation 中所说,任务截止日期目前是 10 分钟(在此限制之后您将获得DeadlineExceededException)。

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

    Worker.java中PROCESSING_TIME_PER_TASK_MS的实际使用情况,这个值是用来限制单个任务完成map调用的次数。

    在每个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

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

    【讨论】:

    • File MapReduceServlet.java // 每个任务执行实际调用 map() 所花费的时间。 public static final int PROCESSING_TIME_PER_TASK_MS = 10000。这是否对 map() 调用设置了限制,即使任务允许 10 分钟。
    • appengine task 和 map() 是什么关系? map() 调用是否作为任务执行?或者一个任务正在调用 map()?
    猜你喜欢
    • 2021-02-12
    • 2010-12-03
    • 1970-01-01
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-22
    相关资源
    最近更新 更多