マッパーの外部からHadoopカウンターに何かを追加したいと思います。したがって、次のようにコンテキストオブジェクトのgetCounterにアクセスします。
context.getCounter(counter, key).increment(amount)
ジョブを開始した場所からコンテキストオブジェクトを取得できません。できるのは
job.getCounters().findCounter()
これでは、Hadoopカウンターに何かを追加することはできません。
マッパーの外部からHadoopカウンターに何かを追加したいと思います。したがって、次のようにコンテキストオブジェクトのgetCounterにアクセスします。
context.getCounter(counter, key).increment(amount)
ジョブを開始した場所からコンテキストオブジェクトを取得できません。できるのは
job.getCounters().findCounter()
これでは、Hadoopカウンターに何かを追加することはできません。
マッパー/リデューサータスク内からのみ、カウンターの使用/書き込みを行うことができます。ジョブトラッカーには、カウンターと対話する機能が組み込まれているため、すでに複雑な設定に干渉する必要はありません。
数か月前にこの問題が発生し、カウンターを使用して中間情報を保存しようとしましたが、必要な情報を定義済みのhdfsディレクトリに書き込み、ジョブが完了したらそれを読み取ることにしました。
編集:マッパーの外側にカウンターを使用する理由と理由は何ですか?
編集#2:完了したジョブの統計が必要な場合、カウンターはそのための適切な場所ではありません。a)ジョブトラッカーがデータの収集を完了すると、カウンターは書き込み可能ではないように見え、b)使用することを目的としています。タスク間でメトリックを集約するため。最近同様のニーズがあり、(エッジノードの)ジョブセットアップクラスで統計の合計を実行してから、データをログに書き込むことになりました。