2016-09-14 11 views
0

後でトラブルシューティングと分析のために、個々のhadoopジョブのすべてのカウンタとメトリックを、elasticsearch内にすべて保存するイベントドリブンな方法で収集する方法を探しています。コンテナーごとのメモリとCPU使用率を取得することを可能とMRAppMetricsが、その1つのそのContainerMetrics、特に、メトリック輸出を使用して個々のhadoopジョブのカウンターとメトリックを集める

  1. 現在、私は、要件に合うように見えたことができたいくつかの方法を見つけましたすべてのジョブのすべてのメトリックを集計します。

  2. Polling MR History ServerのREST APIはかなり単純ですが、ジョブ、タスク、およびその試行のためにすべてのカウンタを収集するためには多くのHTTP呼び出しが必要です。

  3. MRAppMasterのイベントdispatcherに、追加のカスタムEventHandlerを差し込む

    が、MRAppMasterは、カスタム・イベント・ハンドラを登録するには、対応する仕組みを持っていません。

  4. EventHandler#handle(T)メソッドのすべての実行を傍受するjavaagents(java instrumentation api)、バイトコードの変更およびaopのような機能の黒い魔法を使用します。そのようにすれば、すべての要件を解決できるはずですが、MRジョブの追加設定、javaagentの開発と登録が必要になり、一般的にはかなり複雑に思えます。

したがって、個々のハープジョブのメトリックとカウンタを収集する簡単な方法があるかどうかを質問したいと思います。

答えて

1

実際に受信者にメトリックを供給することができます。独自のMetricsSinkを実装し、それを使用するようにhadoopを構成します。

また、GraphiteSinkのようにHadoopディストリビューションにバンドルされているMetricsSinkを使用して、メトリックをGraphiteで入手することもできます。

ジョブが完了するまで(正常に実行されるかどうか)、カウンターは使用できないことに注意してください。

また、オプション2は、HistoryServerをトラブルに陥れる危険性があります(数百万のマッパーを持つジョブをポーリングすると、OOMが発生する可能性があります)。

+0

メトリックシンクでエクスポートするのは簡単ですが、たとえばカスタムジョブカウンタなどの新しいメトリックソースを作成して登録する方法はありますか? – szhem

+0

MetricsSourceの実装も簡単です。http://hadoop.apache.org/docs/r2.7.3/api/org/apache/hadoop/metrics2/package-summary.html – patrungel

+0

この新しく実装されたMetricsSourceにカスタムをフィードする方法ジョブカウンター?例としてMRAppMetricsを取り上げます。このクラスのインスタンスは、[MRAppMaster]内で直接使用されます(https://github.com/apache/hadoop/blob/release-2.7.1/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client- app/src/main/java/org/apache/hadoop/mapreduce/v2/app/MRAppMaster.java#L190)、JobImpl、MapTaskImpl、ReduceTaskImplなどがあります。だから、それはほとんど仕事カウンタを集めるためにフレームワークにカスタムメトリックソースを接続することが可能だと思われる – szhem

関連する問題