0

hdfs から抽出したいフィールドがいくつかあります。

現在、私はやっていhadoop fs -text /path/to/20120903/*-* 2>/dev/null | awk -F '\t' '{ print $16 }' | sort | uniq > users-0903ます。

どうすればこれをスピードアップできますか (0904、0905 で実行する必要があり、これには時間がかかります)。

Hadoop ストリーミングをいくつか試みましたが、提供したスクリプトのほとんどが気に入らなかったようで、断念しました。ストリーミングを使用してこのタスクをどのように試みますか?

4

1 に答える 1

2

Hadoopストリーミングを使用してこれを行う簡単な方法は次のとおりです。

hadoop jar hadoop-streaming.jar -input /path/to/2012093 -output /path/to/output-0903 -mapper "awk -F '\t' '{print \$16}'" -reducer 'uniq'

またはよりよく書かれています:

hadoop jar hadoop-streaming.jar \
  -input /path/to/2012093 \
  -output /path/to/output-0903 \
  -mapper "awk -F '\t' '{print \$16}'"\
  -reducer 'uniq'

マッパーは、タブ間の16番目の単語を値のないキーとして出力します。その後、シャッフル/ソート中にソートされ、への呼び出しuniqは、キーの繰り返しである各キー/値のペアを取得します。これらは、によって1つのコピーに削減されuniqます。

于 2012-12-11T20:03:38.297 に答える