6

Hadoop のサンプル プログラム WordCount を使用して、大量の小さなファイル/Web ページ (約 2 ~ 3 kB) を処理しています。これは Hadoop ファイルの最適なファイル サイズからかけ離れているため、プログラムは非常に遅くなります。ジョブの設定と引き裂きのコストが、ジョブ自体よりもはるかに大きいためだと思います。このような小さなファイルは、ファイル名の名前空間を枯渇させる原因にもなります。

この場合、HDFS アーカイブ (HAR) を使用する必要があると読みましたが、このプログラム WordCount を変更してこのアーカイブから読み取る方法がわかりません。プログラムは変更しなくても動作し続けますか、または変更が必要ですか?

アーカイブに多くのファイルをパックしても、パフォーマンスが向上するかどうかは疑問です。複数のファイルをパックしても、1 つのアーカイブ内のこのファイルは 1 つのマッパーによって処理されるのではなく、多くのファイルが処理されることを読みました。これは、私の場合 (推測) パフォーマンスを向上させません。

この質問が単純すぎる場合は、私が Hadoop の初心者であり、Hadoop の経験がほとんどないことを理解してください。

4

5 に答える 5

4

HDFS を使用しても、hadoop に大量の小さなファイルを処理させていることに変わりはありません。この場合の最良のオプションは、おそらくcatファイルを 1 つの (または数個の大きな) ファイルにすることです。これにより、マッパーの数が減り、処理する必要のあるものの数が減ります。

分散システムで運用している場合、HDFS を使用するとパフォーマンスが向上します。疑似分散 (1 台のマシン) のみを実行している場合、HDFS はパフォーマンスを向上させません。制限はマシンです。

多数の小さなファイルを操作している場合、多数のマッパーとリデューサーが必要になります。セットアップ/ダウンは、ファイル自体の処理時間に匹敵する可能性があり、大きなオーバーヘッドが発生します。catファイルを変更すると、ジョブのマッパー Hadoop 実行の数が減り、パフォーマンスが向上します。

HDFS を使用してファイルを保存することで得られる利点は、複数のマシンを使用する分散モードにあります。ファイルはマシン間でブロック (デフォルトは 64MB) で保存され、各マシンはマシン上に存在するデータのブロックを処理できます。これにより、ネットワーク帯域幅の使用が削減されるため、処理のボトルネックにはなりません。

ファイルをアーカイブすると、hadoop がそれらを解凍しようとしている場合、hadoop にはまだ多数の小さなファイルが残っています。

これがあなたの理解に役立つことを願っています。

于 2011-05-09T00:33:23.427 に答える
3

Hadoop に関する私のまだ限られた理解から、適切な解決策はSequenceFile、HTML ファイルを値として、場合によっては URL をキーとして含む (s) を作成することだと思います。(s)に対して M/R ジョブを実行するSequenceFileと、各マッパーは多くのファイルを処理します (分割サイズによって異なります)。各ファイルは、単一の入力として map 関数に提示されます。これらのファイルを読み取るためにSequenceFileAsTextInputFormatとして使用することができます。InputFormat

参照: Hadoop MapReduce で複数の非テキスト ファイルを 1 つのマップに提供する

于 2011-05-12T17:52:50.523 に答える
2

最近この記事をブックマークして後で読むと、ここで同じ質問が見つかりました :) エントリは少し古いため、現在の関連性が正確にはわかりません。Hadoop への変更は、非常に速いペースで行われています。

http://www.cloudera.com/blog/2009/02/the-small-files-problem/

このブログ エントリは、Hadoop を使い始める人に推奨される「Hadoop: The Definitive Guide, Second Edition」の著者でもある Tom White によるものです。

http://oreilly.com/catalog/0636920010388

于 2011-06-08T14:25:23.337 に答える