2012-01-21 12 views
1

私は、hadoopとそのアプリケーションについてもう少し詳しく学んでいます。大量のデータセットや大きなファイルに対応していることが分かります。たとえば、hadoop/hdfsのようなものではない、比較的少数のファイル(100k)を処理していたアプリケーションがあるとしましょう。しかし、1台のマシンで実行するには大量の時間がかかりますので、そのプロセスを配布したいと思います。小規模のJava分散プログラミング

この問題はマップの縮小スタイルの問題(たとえば、各ファイルを個別に処理してから結果を集計できるなど)に分類できます。私はAmazon EC2のようなインフラストラクチャを使用していますが、実際にプロセスの結果を集約するためにどの技術を探求するかについてはあまりよく分かりません。 hadoopのように見えるかもしれませんが、ここで少し過剰です。

誰でもこのタイプの問題についてのガイダンスを提供できますか?

+0

私は理解できません。 Hadoopのreduceフェーズは、計算結果を正確に集計することを意味します。 – Tudor

+0

右ですが、hdfsを使用していません。小さなファイルがたくさんある場合、ファイルサイズは少し大きすぎるはずです(私はこれらのファイルを集約するテクニックがあると知っています。私の場合はファイルが異なります画像などのファイル)。私はhdfsが適切でない場合、私はいつもs3のようなものを使うことができると思いますか? –

+0

あなたはそうです、HDFSは大量の小さなファイルのためのものではなく、パフォーマンスは非常に悪いです、私は大学の "クラスタ"を使って私自身の実験からこれを伝えることができます。幸いにも私のファイルはテキストファイルなので、それらを1つの大きなファイルにマージすることができ、パフォーマンスは60倍向上しました。:) – Tudor

答えて

1

最初に、ファイルを結合できないという前提を再考することをお勧めします。画像でさえ組み合わせることができます。マッパーで再度それらを分解する方法でそれを行う方法を理解する必要があります。それらをいくつかのセンチネル値またはそれらの間のマジックナンバーと組み合わせると、それらを1つの巨大なファイルに変えることが可能になるかもしれません。

その他のオプションには、画像をセルに保存できるHBaseがあります。 HBaseにはTableMapperとTableReducerも組み込まれており、生データと一緒に処理結果を半構造化して保存することができます。

EDIT:質問「Hadoopのやり過ぎである」、あなたは次のことを考慮する必要があるためとして:

  1. のHadoopは、オーバーヘッドの少なくとも一つのマシン(HDFS名前ノード)を追加します。通常は、SPOFであるため、そのマシンにデータを格納したり、ジョブを実行したりする必要はありません。

  2. Hadoopは、レイテンシが比較的高いバッチでデータを処理するのに最適です。 @Raihanに言及しているように、リアルタイムまたは低レイテンシの結果が必要な場合は、ニーズをより良く満たすことができる他のFOSS分散コンピューティングアーキテクチャがいくつかあります。

  3. 100k個のファイルはあまりあまりありません。たとえそれらが100kであっても、それは10GBのデータです。

  4. 上記以外のHadoopは、分散コンピューティングの問題に接近するための比較的オーバーヘッドの低い方法です。その背後には巨大で役立つコミュニティがあり、必要に応じて迅速にヘルプを得ることができます。また、安価なハードウェアとフリーOSで動作することに重点を置いているため、重大なオーバーヘッドはありません。

要するに、私はあなたが他のもののためにそれを捨てる前にそれを試みます。

+0

私は、一度にすべて処理できる単一のファイルにそれらを結合できないということを意味しました。私はそれらをアーカイブに保存するか、またはハーフープシーケンスファイルに入れることができます。私はそれについてより明確にすべきだった。この問題の主な問題は、このような比較的少数のファイルのために少し過度に過小評価されたということです。 –

+0

詳細は編集を参照 –

+0

ありがとう、情報を感謝します。 –

関連する問題