2

Cassandra の Reading パフォーマンスのベンチマークを行っています。テストセットアップのステップで、1 / 2 / 4 の ec2 インスタンスとデータノードを持つクラスターを作成しました。1 億のエントリ (約 3 GB の csv ファイル) を含む 1 つのテーブルを作成しました。次に、spark-cassandra-connector を使用してデータを RDD に読み込む Spark アプリケーションを起動します。

ただし、動作は次のようにする必要があると考えました。Cassandra (Spark では同じインスタンス数) を使用するインスタンスが多いほど、読み取りが速くなります! 書き込みでは、すべてが正しいようです (クラスターが 2 倍大きい場合、~2 倍速くなります)。

しかし: 私のベンチマークでは、2 または 4 インスタンス クラスターよりも 1 インスタンス クラスターの方が読み取りが常に高速です!!!

私のベンチマーク結果:

クラスターサイズ 4: 書き込み: 1750 秒 / 読み取り: 360 秒

クラスターサイズ 2: 書き込み: 3446 秒 / 読み取り: 420 秒

クラスターサイズ 1: 書き込み: 7595 秒 / 読み取り: 284 秒


追加の試行 - Cassandra-Stress ツールを使用

Cassandra クラスター (サイズ 1 / 2 / 3 / 4 ノード) で「cassandra-stress」ツールを起動したところ、次の結果が得られました。

Clustersize    Threads     Ops/sek  Time
1              4           10146    30,1
               8           15612    30,1
              16           20037    30,2
              24           24483    30,2
             121           43403    30,5
             913           50933    31,7
2              4            8588    30,1
               8           15849    30,1
              16           24221    30,2
              24           29031    30,2
             121           59151    30,5
             913           73342    31,8
3              4            7984    30,1
               8           15263    30,1
              16           25649    30,2
              24           31110    30,2
             121           58739    30,6
             913           75867    31,8
4              4            7463    30,1
               8           14515    30,1
              16           25783    30,3
              24           31128    31,1
             121           62663    30,9
             913           80656    32,4


結果: 4 つまたは 8 つのスレッドの場合、単一ノード クラスターは、より大きなクラスターと同じか、それよりも高速です!!!



ダイアグラムとして ここに画像の説明を入力
の結果: データセットはクラスタ サイズ (1/2/3/4)、x 軸はスレッド、y 軸は ops/sec です。

--> ここで質問: これらの結果はクラスター全体の結果ですか、それともローカル ノードのテストですか (つまり、リングの 1 つのインスタンスのみの結果ですか)?

誰かが説明できますか?ありがとうございました!

4

1 に答える 1

2

Cassandra の各ノードで Spark ワーカーを実行して、同様のテストを実行しました。

1,500 万行 (約 1.75 GB のデータ) を持つ Cassandra テーブルを使用して、spark ジョブを実行し、各行を文字列としてテーブルから RDD を作成し、行数のカウントを出力しました。

これが私が得た時間です:

1 C* node, 1 spark worker - 1 min. 42 seconds
2 C* nodes, 2 spark workers - 55 seconds
4 C* nodes, 4 spark workers - 35 seconds

そのため、spark ワーカーが C* ノードと同じ場所に配置されている場合、ノードの数に応じてかなりうまくスケーリングされるようです。

ワーカーを Cassandra と同じ場所に配置しないことで、すべてのテーブル データがネットワークを経由することになります。それは遅くなり、おそらくあなたの環境ではボトルネックです。それらを同じ場所に配置すると、spark が各マシンにローカルなトークンから RDD パーティションを作成するため、データの局所性からメリットが得られます。

他にもボトルネックがあるかもしれません。私は EC2 とそれが提供するものに精通していません。C* はネットワーク ストレージを好まないので、ネットワーク ストレージではなくローカル ディスク ストレージを使用することをお勧めします。

于 2015-07-10T20:22:46.957 に答える