2

私は Hadoop の世界に不慣れで、map reduce の考え方でコードを書くことを学ぼうとしています。

だから、私はマイケル・ノールのチュートリアルに従っていました。

(新しいフレームワークを理解する以外に) 私が直面している課題の 1 つは、このフレームワークが使用するターミナル トリックの量です。

だから何をしますか。

  $echo "foo foo quux labs foo bar quux" | /home/hduser/mapper.py | sort -k1,1 | /home/hduser/reducer.py

意味???エコーは何をしますか??

また、上記のコードの出力は次のとおりです。

  bar     1
  foo     3
  labs    1
   quux    2

今、私が並べ替えを持っていない場合 -k1,1

  foo     2
  bar     1
  labs    1
  foo     1
   quux    2

ソートフラグの効果は何ですか? -k1,1 とはどういう意味ですか?

ありがとう..

参照: http://www.michael-noll.com/tutorials/writing-an-hadoop-mapreduce-program-in-python/

4

2 に答える 2

7

Linuxでは、垂直バーは、|あるコマンドの出力を別のコマンドの入力にリダイレクトするために使用されます。

このechoコマンドは、次の文字列を標準出力に書き込みます。したがって、あなたの場合、それは書き込みfoo foo quux labs foo bar quuxであり、それは入力として、に渡され/home/hduser/mapper.py、その出力は入力として、に渡されますsort

sortテキストをソートするLinuxコマンドです。フラグは、-k並べ替える列を示します。したがって、1,1列1で始まり、列1で終わるようにソートするように指示します。

コマンドの詳細については、Linuxターミナルに入力man sortしてください。これがお役に立てば幸いです。

于 2012-09-13T14:12:24.240 に答える
2

Hadoop ストリーミングで作業する場合は、最初にこのチュートリアルを実行して、シェル コマンドの使用方法を学習すると役立つ場合があります。それはあなたをかなり助けてくれるでしょう。

基本的に、Reducer の動作方法により、出力は異なります。現在のキーが最後のキーと同じである間、すべての値を合計します。現在のキーが以前のキーと異なる場合、以前のキーの値を書き出して、現在のキーの処理を開始します。入力が のようfoo foo bar fooになると、Mapper はこれらの値を順番に処理し、次のような出力を生成します。

foo 1
foo 1
bar 1
foo 1

これは、同じ形式で Reducer に送信されます。Reducer はそれを 1 行ずつ読み取ります。これをよりよく理解するために、Reducer が実行する手順を次に示します。

// current_key = NULL
input_key,input_value: foo,1
input_key != current_key:
  current_key = input_key
  current_value = input_value
// current_value = 1

// current_key = foo
input_key,input_value: foo,1
input_key == current_key:
  current_value += input_value
// current_value = 2

// current_key = foo
input_key,input_value: bar,1
input_key != current_key:
  emit <current_key, current_value>
  current_key = input_key
  current_value = input_value
// current_value = 1

// current_key = bar
input_key,input_value: foo,1
input_key != current_key:
  emit <current_key, current_value>
  current_key = input_key
  current_value = input_value
// current_value = 1

これにより、foo 2、bar 1、foo 1 の出力が得られます。ここで、入力を Reducer に並べ替えると、次のようになります。

foo 1
foo 1
foo 1
bar 1

これにより、Reducer はキーfooによって中断されることなく一緒に値を追加し続けることができるため、foo 3, bar 1 の出力が得られます。値のソートは、に基づいてソートする UNIX コマンドであるbarによって実行できますsort -k1,1最初のフィールド。Hadoop MapReduce フレームワークは、中間値 (つまり、foo 1、foo 1、bar 1、foo 1 データ) を自動的にソートします。これにより、同じキーを持つすべてのキーと値のペアが同じ Reducer にまとめられ、あたかも同じ出力が生成されます。を介して中間値を渡しましたsort -k1,1

于 2012-09-13T17:17:35.853 に答える