2013-05-22 5 views
10

私はSpark(Berkeley)クラスタコンピューティングシステムに取り組んでいます。私の研究では、Redis、Memcachedbなどの他のメモリ内システムについて学びました。誰かが私にSPARKとREDIS(とMEMCACHEDB)の比較を与えることができれば素晴らしいと思います。スパークはこれらの他のインメモリシステムよりもどのようなシナリオで優位性がありますか?メモリ内クラスタコンピューティングシステムの比較

答えて

30

完全に異なる獣です。

Redisとmemcachedbは分散ストアです。 Redisは、さまざまなデータ構造を特徴とするオプションの永続性を備えた純粋なインメモリシステムです。 Memcachedbは、Berkeley-DB上にmemcached APIを提供します。いずれの場合も、OLTPアプリケーション、または単純なリアルタイム分析(オンザフライ・データ集約)のために使用される可能性が高くなります。

Redisとmemcachedbの両方に、格納されたデータを効率的に並列に反復するメカニズムがありません。保存されたデータを簡単にスキャンして処理することはできません。彼らはこれのために設計されていません。また、クライアント側のシャーディングを使用する以外は、クラスタ内でスケールアウトすることはできません(Redisクラスタの実装は進行中です)。

スパークは、メモリ内の分散データセットを提供することで、大規模な分析ジョブ(特に反復ジョブ)を迅速化するシステムです。 Sparkを使用すると、クラスタのマシン上で効率的な反復的なマップ/リダクションジョブを実装できます。

RedisとSparkはどちらもメモリ内のデータ管理に依存しています。しかし、Redis(とmemcached)は他のOLTP NoSQLストアと同じ球場でプレイしますが、SparkはHadoopのmap/reduceシステムに似ています。

Redisは、サブミリ秒の遅延で高スループットで多数の高速ストレージ/検索操作を実行するのに適しています。 Sparkは、大量のデータに対して機械学習、グラフ解析、対話型データマイニングなどの大規模反復アルゴリズムを実装することに輝きます。

更新:ストームに関する追加質問

質問が嵐にスパークを比較することである(下記のコメントを参照してください)。

スパークは、既存のデータボリュームが大きい場合、データをプロセスに移動するのではなく、データを移動する方が安価であるという考えに基づいています。各ノードはそのデータセットを格納(またはキャッシュ)し、ジョブはノードに送信されます。したがって、プロセスはデータに移動します。 I/Oを避けるためにメモリストレージが積極的に使用され、反復アルゴリズム(前のステップの出力が次のステップの入力である場合)を効率的にする点を除けば、Hadoop map/reduceと非常に似ています。 Sharkは、Sparkの上に構築されたクエリエンジンです(アドホック分析クエリをサポートしています)。

スパークの完全な構造的反対であるとStormを見ることができます。 Stormは分散ストリーミングエンジンです。各ノードは基本プロセスを実装し、データアイテムは相互接続されたノードのネットワークに出入りします(Sparkとは逆です)。 Stormを使用すると、データはプロセスに移行します。

両方のフレームワークは、大量のデータの計算を並列化するために使用されます。

しかし、Stormは、生成された/収集された多数の小さなデータ項目(Twitterストリーム上でリアルタイムでいくつかの集計関数や解析を計算するなど)を動的に処理するのに優れています。

Sparkは、Sparkクラスタにインポートされた既存のデータ(Hadoopなど)のコーパスに適用され、インメモリ管理による高速スキャン機能を提供し、反復アルゴリズムのI/Oのグローバルな数を最小限に抑えます。

+2

ストームはどうですか?あなたはそれをスパーク(またはサメ)とどのように比較できますか? – void

+0

私の更新を見てください... –

+0

更新ありがとうございます。気にしないでもう1つの質問があります。 Sparkには、リアルタイム分析のためのツール「Spark Streaming」があります。 Storm(別のリアルタイム解析ツール)に匹敵しますか?それにはどんな利点がありますか? – void