今のところ、かなり大きな名前のカウンターを作成する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の内部のデバッグにかなりの時間を費やしました。興味深いもの:
org.Apache.hadoop.mapred.ClientServiceDelegate#getJobCounters
_メソッドは、[〜#〜] truncated [〜#〜]名前と[〜#〜を持つヤーンからカウンターの束を返します] full [〜#〜]表示名。org.Apache.hadoop.mapreduce.Counter#getName
_メソッドが正しく機能するようです。getName()
は非推奨のようです
代わりに、255のデフォルトの最大長が付属するgetUri()
を使用できます。
ドキュメントリンク:
getUri()
個人的に試したことはありませんが、この問題を解決できる可能性があるようです。