3

map reduce の概念はかなりよく理解していますが、Hadoop はまったくの初心者です。

Hadoop チュートリアルのほとんどは、WordCount の例から始まります。そこで、完璧に機能する簡単なワードカウント プログラムを作成しました。しかし、非常に大きな文書の単語数を数えようとしています。(50GB以上)。

Hadoop の専門家への私の質問は、Hadoop は大きなファイルをどのように処理するのでしょうか? ファイルのコピーを各マッパーに転送しますか、それとも自動的にファイルをブロックに分割してそれらのブロックをマッパーに転送しますか?

MapReduce での私の経験のほとんどは、マッパーが一度にドキュメントを処理する CouchDB によるものでしたが、Hadoop について読んだところ、複数の小さなファイルを処理するように設計されているのか、いくつかの大きなファイルを処理するように設計されているのか、あるいはその両方を処理するように設計されているのでしょうか?

4

3 に答える 3

3

Hadoop は、大きなファイルを 64MB または 128MB (デフォルト) のサイズのブロックに分割して処理します。これらのブロックはデータノード全体で利用でき、メタデータは Namenode にあります。mapreduce プログラムが実行されると、各ブロックは実行用のマッパーを取得します。マッパーの数を設定することはできません。マッパーが完了すると、それらはレデューサーに送信されます。レデューサーのデフォルトの数は 1 で、設定することができ、そこから出力が得られます。複数の小さなファイルを処理することもできますが、パフォーマンスを向上させるために大きなファイルにグループ化することをお勧めします。たとえば。各小さなファイルが 64MB 未満の場合、各ファイルは実行用のマッパーを取得します。お役に立てれば!

于 2013-03-19T04:01:20.703 に答える
1

HDFSの巨大なファイルは、すでに分散して保存されています。mapreduceジョブを実行するときはInputFormat、ファイルにを指定する必要があります。が分割可能である場合InputFormat(つまり、非圧縮、またはbz2形式で圧縮されている場合)、必要な数のマッパーに分割できます。最も合理的な実装では、ファイル内のすべてのレコードが何らかのマッパーに送られ、マッパーが同じレコードを2回取得することはありません。

ファイルのコピーは転送されません。マッパーは、割り当てられたファイルのセグメントを読み取るだけです。これらはネットワーク経由でストリーミングされるか、可能であればファイルの一部が保存されているマシンに割り当てられます。それぞれの入力形式を指定する限り、Hadoopを使用して必要な数の入力ファイルを読み取ることができます。

于 2013-03-19T03:55:12.737 に答える
0

デフォルトでは、Hadoop はデータをファイルごとに分割し、各ファイルをマッパーに送信します。これをオーバーライドできますが、少し複雑です。ファイルがまだ分割されていない場合は、常にスクリプトを使用してファイルを分割します。

于 2013-03-19T03:27:11.940 に答える