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 の実際の使用状況を見ると、この値は、1 つのタスクで実行されるマップ呼び出しの数を制限するために使用されます。

map呼び出しが実行された後、タスクの開始から 10 秒以上経過すると、残りのマップ呼び出しを処理する新しいタスクが生成されます。

  1. Worker.scheduleWorker指定された各シャードに対して新しいタスクを生成します
  2. 各タスクが呼び出されますWorker.processMapper
  3. processMapper1回mapの呼び出しを実行
  4. 2. からの経過時間が PROCESSING_TIME_PER_TASK_MS 未満の場合は、3. に戻ります。
  5. そうでなければ、処理が完了していない場合は、新しいワーカー タスクを再スケジュールします

最悪のシナリオでは、デフォルトのタスク リクエストの期限 (10 分) が個々のマップ コールに適用されます。

于 2012-05-09T01:10:59.363 に答える