投稿者のコメントによると、最初のステップは、mongod
サーバー ログを見ていることを確認することです。これをローカルで行う最も簡単な方法は、あまり知られていない HTTP インターフェースからmongod
:にアクセスすることですhttp://localhost:28017
。これは、サーバーがデフォルトの場所にインストールされていない場合でも機能するため、ログは OS 固有のデフォルトの場所 ( /usr/local/var/log/mongodb/mongo.log
Mac OS X など) にはありません。非標準でこれにアクセスする方法については、ドキュメントを参照してください。展開環境。
それでも問題が解決しない場合は、MongoDB M/R のデバッグをさらに深く掘り下げる必要がありますが、これはいくつかの理由で注意が必要です。
- M/R ジョブは、DB の残りの部分から分離された JS スコープで実行されます
- M/R ジョブは、M/R 出力ドキュメント以外には書き込めません
- MongoDB のロガーは、ロギング ストリームに何を出力するかについて裁量権を持っています。
以下は、本番環境での Mongo M/R の広範な使用に基づく私の提案です。
ログレベルを上げる
突然、以前は見えなかったprint
出力の一部が表示されます。見え始めるまで、一度に 1 レベルずつ行ってください。
use admin
db.runCommand( { setParameter: 1, logLevel: 2 } )
ログ レベルは 0 ~ 5です。 setParameterを参照してください。-v、-vv、...、-vvvvv を使用して、サーバーの起動時にこれを行うこともできます。
プロファイリング レベルを最大に上げます (2)
プログラムで検査できるデータの枯渇 (プロファイリング コレクション) を提供するため、特に高いログ レベルと組み合わせると、これが役立つことがわかりました。ドキュメントを参照してください。
非常に大きな M/R ジョブを実行している場合、これはパフォーマンスに悪影響を及ぼす可能性があります。
M/R による Piggyback デバッグ出力
アイデアは簡単です。必要なデバッグ情報を含むオブジェクトの配列を_debug
フィールドに追加して、出力されたすべてのドキュメントに追加し、reduce フェーズに合わせてフィルター + 連結します。このようにして、_debug
配列は出力コレクションになります。特定の問題をすばやく見つけたい場合は、インデックスを作成することもできます。
お役に立てれば。幸運を!