web-dev-qa-db-ja.com

Hadoopの切り捨てられた/一貫性のないカウンター名

今のところ、かなり大きな名前のカウンターを作成するHadoopの仕事があります。

たとえば、次のようなもの:_stats.counters.server-name.job.job-name.mapper.site.site-name.qualifier.qualifier-name.super-long-string-which-is-not-within-standard-limits_。このカウンターは、WebインターフェイスおよびgetName()メソッド呼び出しで切り捨てられます。 Hadoopにはカウンターの最大名に制限があり、この設定ID _mapreduce.job.counters.counter.name.max_はこの制限を構成するためのものであることがわかりました。そこで、これを_500_に増やし、Webインターフェースに完全なカウンター名が表示されるようになりました。ただし、カウンタのgetName()は依然として切り捨てられた名前を返します。

誰か、これを説明してください、または私の間違いを教えてくれませんか?ありがとうございました。

EDIT 1

私のHadoopサーバー構成は、HDFS、YARN、およびmap-reduce自体を備えた単一サーバーで構成されています。 map-reduceの間、いくつかのカウンターの増分があり、ジョブが完了した後、ToolRunnerで_org.Apache.hadoop.mapreduce.Job#getCounters_を使用してカウンターをフェッチします。

EDIT 2

Hadoopバージョンは次のとおりです。

_Hadoop 2.6.0-cdh5.8.0
Subversion http://github.com/cloudera/hadoop -r 042da8b868a212c843bcbf3594519dd26e816e79 
Compiled by jenkins on 2016-07-12T22:55Z
Compiled with protoc 2.5.0
From source with checksum 2b6c319ecc19f118d6e1c823175717b5
This command was run using /usr/lib/hadoop/hadoop-common-2.6.0-cdh5.8.0.jar
_

私はいくつかの追加調査を行いましたが、 この問題 は私のような状況を説明しているようです。しかし、カウンターの数を増やすことはできますが、カウンターの名前の長さを増やすことはできません...

EDIT 3

今日、Hadoopの内部のデバッグにかなりの時間を費やしました。興味深いもの:

  1. _org.Apache.hadoop.mapred.ClientServiceDelegate#getJobCounters_メソッドは、[〜#〜] truncated [〜#〜]名前と[〜#〜を持つヤーンからカウンターの束を返します] full [〜#〜]表示名。
  2. マップとリデューサー自体をデバッグすることはできませんでしたが、ロギングの助けを借りると、リデューサーの実行中に_org.Apache.hadoop.mapreduce.Counter#getName_メソッドが正しく機能するようです。
78
mr.nothing

getName()は非推奨のようです

代わりに、255のデフォルトの最大長が付属するgetUri()を使用できます。

ドキュメントリンク: getUri()

個人的に試したことはありませんが、この問題を解決できる可能性があるようです。

1
Akash G