2012-05-08 104 views
0

我想在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; 

這是否意味着,在地圖調用只能用於10secs持續。 10秒後會發生什麼? 我可以像1分鐘或10分鐘那樣增加這個數量嗎?

-Aswath

回答

0

MapReduce的操作都在使用Push Queues任務執行,並在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. 比PROCESSING_TIME_PER_TASK_MS距今已有2回3
  5. 否則,如果處理未完成reschedule a new worker task

在最糟糕的情況下,默認任務請求截止日期(10分鐘)應適用於您的每個地圖調用。

+0

文件MapReduceServlet.java //每次執行任務時花費在實際map()調用上的時間量。 public static final int PROCESSING_TIME_PER_TASK_MS = 10000.這是否對map()調用設置了限制,即使任務允許10min。 – aswath

+0

改進了我的回答 – proppy

+0

appengine任務和map()之間有什麼關係? map()調用是否作爲任務執行?或者任務是調用map()? – aswath