2012-04-30 11 views
4

私はハープを学習することを考えていますが、それが私の問題を解決するかどうかはわかりません。基本的に私は待ち行列とたくさんの労働者と仕事をしています。各作業者は少量の作業を行い、結果が成功した場合は保存するか、後で処理するためにキューに戻します。私の問題はスケーラブルで、ネットワーク上の帯域幅(ec2)によって制限されています。これは、複数のCPUがデータを処理し続けることはありません。私は、ハープのクラスターでJavaで自分のジョブを実行し、キューを介してハーフ・カットを配布することができたと考えました。これはより良いアプローチでしょうか?私はhadoopがキューを持つことができると仮定し、帯域幅の使用を最小限に抑え、CPUの使用量を最大にするためにできるだけローカルにジョブを実行しようとしていますか?私のプログラムは非常にCPUに拘束されていますが、パフォーマンスの最近の問題のほとんどは、ネットワークを介して作業を渡すことに関連しています(できるだけローカルで作業を続けたい)が、私が見ているhadoopチュートリアルと私の問題の違いは、チュートリアルでは、すべての作業は事前にわかっていますが、私のプログラムでは、常に自分のために新しい作業が生成されています(最終的に完了するまで)。これが機能し、ネットワーク経由でメッセージを渡すことの影響を軽減できますか?hadoopを分散キューサーバーとして使用できますか?

申し訳ありません私はhadoopを初めて使い、問題を解決できるかどうかを知りたがっています。

+0

RabbitMQ?...... – PurplePilot

+0

@PurplePilot私は実際にはrabbitmqを現在使用しています。しかし、私の仕事は非常に小さいです(しかし、それの多く)、私は仕事を遅らせることに気付いています(最大200-300mb/sのスループットを得て、私のcpusはネットワークを送ることができます)。私は仕事をできるだけローカルに保つ何かがあるかどうかを調べようとしています。 –

答えて

1

Hadoopは大量のデータセットに対してバッチのようなモードでジョブを実行しています。キューに似た振る舞いをするのは難しいですが、不可能ではありません。 Apache ZooKeeperがあります。必要に応じてキューを構築するための同期を提供します。

解決しようとしているような問題を解決するツールはたくさんあります。私はRabbitMQを見てみることをお勧めします。あなたはPythonを使用する場合、Celeryは非常に素晴らしいです。

+0

偉大な答えをありがとう。私は現在、rabbitmqを使用しています(その偉大ですが、数十億の小さな作業項目があるため、帯域幅が限られているためネットワークのオーバーヘッドが高くなっています)。問題は、仕事をするためにネットワーク上でデータを送るのが遅れていることです。私の仕事はバッチ・ジョブですが、各項目を非常に迅速に処理することができます。私のプログラムが作業項目を作成するかどうかを確認しようとしています。 –

+0

基本的に、Rabbitmqは私の問題を解決しますが、私はネットワークIOを減らす同様のタイプの機能を得ようとしています。 –

+0

ファイルはまだHadoopに取り込まれる必要があります.Hadoopはネットワーク上を3回移動して複製を行います。その後、ローカルで処理します。このプロセスにはまだ十分なオーバーヘッドがあります。基本的に、Hadoopで何か高速な処理をしたい場合は、時間がかかります。 –

関連する問題