UbuntuでEclipseを使用して、Pythonのmrjobライブラリで記述されたmapreduceジョブをデバッグしようとしています。誰かがこれをどのように行うことができるか考えていますか?
2 に答える
MrJobsのデバッグは、非常に難しい場合があります。私の学習曲線は、ジョブフローを中断する代わりに、(トレースバックモジュールを使用して)生成された例外を結果に生成するマッパーとレデューサー内の句を除いて、try...を使用することから始まりました。しかし、その最初のアプローチは、ジョブが完了するまで数分待たなければならないので時間がかかり、最終的に、ほとんどのエラーは未定義の変数または構文エラーになりました。そこで、小さなテストログを使用してジョブをフィードしてみました。これにより、問題が何であるかを確認するためにジョブの実行に費やす時間が大幅に短縮されました。もう1つのアプローチは、Hadoopの外部でマッパーとリデューサーをテストすることでした。これは、その目的でpdbを使用でき、問題をすばやく把握できるため、非常に便利です。
最後に、MrJobのドキュメントを使用するという提案を試すこともできます。そうすると、ローカルでジョブを実行する方法がわかります。これは非常に便利です:http: //packages.python.org/mrjob/runners-inline.html
重要なのは、可能な限り多くのテストカバレッジを持つことです。ローカルでジョブを実行している場合でも、ジョブを繰り返し再実行すると、すぐに1日が無駄になる可能性があります。私にとってうまくいったのは、マップを分解してステップを一連の小さな関数に減らし、小さなステップごとに単体テストを作成することでした。
また、ローカルのPythonバージョンとHadoopインスタンスにインストールされているバージョンの違いに注意してください(最新のEMRインスタンスはPython 2.6を使用しています)。ここにいくつかのデバッグのヒントをリストしました。