2011-10-28 5 views
2

現在のハイドープカウンタを設定/増やす方法は、longの値しか取らない。Hadoopカウンタの値としてテキスト/文字列型を指定する

例:increment(long incr)およびsetValue(long value)は、私がHadoop Javadocsから取り出した2つの方法です。

私の要件は、カウンタの一部として(キーと値の組み合わせとして)より複雑な種類の情報を格納することです。この情報には、(string, string)のキーと値のペアが含まれる場合があります。

Hadoopカウンタを使用してこれを達成するにはどうすればよいですか? これが不可能な場合、JOB_IDを指定することにより、後で取り出すことができ、このようなその他の情報を格納することを可能にHadoop/MR内の他のデータ構造/機能等、ある

おかげで、Hadoopのので PARAMS

答えて

0

カウンタは文字列のみをサポートし、マップ内のOutputCollector.collect(K,V)を使用して統計を収集するためにキーと値のペアを使用して関数を減らすことができます。

これの利点は、OutputCollectorを使用するマッパーからの統計情報を、レデューサー関数で(集計のように)さらに処理することができます。レデューサーからの統計は、処理なしで指定された出力フォーマットに書き込まれます。

1

カウントはカウントの合計であるため、カウンタが機能します。各タスクには、上位に集約できる独自のカウンタがあります。文字列は、同じ種類の情報を持っていません(どのように文字列をインクリメントしますか?)。

これについてはZooKeeperをご覧ください。それは雑多な情報を格納し、プロセス間を調整するのに最適です。ジョブの実行を表すzノード(job_idはおそらく?)を作成し、個々の文字列を子として持つことができます。

+0

1.何千ものMRタスクがカウンター/ストリングを書いている場合、ZKスケールですか? 2.オブジェクトを文字列の代わりにZKに格納することはできますか? –

+0

(同じものを更新するのではなく)一意のznodeに書き込んでいる場合は、特にZKは何千ものスケールになります。いいえ、文字列を保存することしかできません。私は通常、シリアル化されたオブジェクトをそこに格納します(またはJSON)。 –