3

新しい Google App Engine Pipeline API を使用して MapReduce ジョブの作成を開始しましたが、実行時にすべてのワーカーに同じリストのコピーを持たせたいという状況に遭遇しました。

1 つのオプションとして memcache を使用することもできますが、このリストのサイズが memcache で設定できるサイズよりも最終的に大きくなる可能性があるのではないかと心配しています。私の他のオプションは、実行時にこのリストコンテキストですべてのワーカーを初期化することだと思いますが、ドキュメントでこれを行う方法が見つからず、ソースコードを見ても明らかな答えはありません.

map reduce 関数に追加のパラメーターを追加する方法や、MapReduce ワーカー コンテキストに状態を挿入する方法はありますか?

4

1 に答える 1

2

現在、正式な方法はありません。おそらく、タスクを MapReduce パイプラインの先頭に追加して、リストを計算してキャッシュすることができます (データストアまたはブロブストアのいずれか最も適切な方に加えて、memcache のコピー)。次に、マッパーやリデューサー関数でリストを保持するグローバル変数の遅延初期化を行い、最初に memcache をチェックし、必要に応じてデータストア/ブロブストアにフォールバックします (そしてリストを再キャッシュします)。タスクを処理するために新しいインスタンスが起動されると、それらは自身を初期化します。

MapReduce の開始時にリストが修正されていると仮定すると、異なるインスタンスからの読み取りの競合は問題になりません。

于 2012-06-09T02:36:57.013 に答える