Amazon EMR で Hadoop ストリーミングを使用して、一連のテキスト ファイルの単純な単語数をカウントしようとしています。Hadoop ストリーミングと Amazon の EMR を処理するために、非常に単純化されたデータ セットも使用しました。各テキスト ファイルには 1 行のテキストしかありません (1 行には任意の数の単語を含めることができます)。
マッパーは R スクリプトで、行を単語に分割し、ストリームに吐き出します。
cat(wordList[i],"\t1\n")
カウントを加算するために LongValueSum Aggregate Reducer を使用することにしたので、マッパー出力の前に LongValueSum を付ける必要がありました。
cat("LongValueSum:",wordList[i],"\t1\n")
レデューサーを「集約」に指定します
私が今持っている質問は次のとおりです。
マッパーとリデューサーの間の中間段階で、ストリームをソートするだけです。キーで実際に結合するわけではありません。私は正しいですか?マッパーが出力する単語のプレフィックスとして「LongValueSum」を使用しない場合、リデューサーでキーでソートされたストリームを受け取るだけで、集約されないため、これを尋ねます。つまり、リデューサーでの (K, list(Values)) とは対照的に、K によって注文されたものを受け取るだけです。コマンドでコンバイナーを指定する必要がありますか?
他の集計リデューサーはどのように使用されますか。なるほど、http://hadoop.apache.org/mapreduce/docs/r0.21.0/api/org/apache/hadoop/mapred/lib/aggregate/package-summary で利用可能な他の多くのレデューサー/集約/コンバイナー。 html
これらのコンバイナーとリデューサーは AMAZON EMR セットアップでどのように指定されていますか?
この種の問題は、コンバイナーの Hadoop ストリーミングで報告され、修正されていると思いますが、AMAZON EMR がホストしているバージョンと、この修正が利用可能なバージョンはわかりません。
- カスタム入力フォーマットとレコード リーダーとライターはどうですか。Javaで書かれたライブラリがたくさんあります。これらのオプションごとに Java クラス名を指定するだけで十分ですか?