0

3 ノード クラスター (Cassandra 1.2.1) とレプリケーション ファクター 3 の列ファミリーをセットアップしました。

列ファミリーは metric_hour と呼ばれ、列名で 1 時間の 15 秒平均値を保持します。

  • アカウント名
  • メトリック名
  • 値の型 (文字列)
  • ユニットタイプ(文字列)
  • m0
  • m1 ...
  • m239

私は 6 つのクライアントを並行して実行しており、それぞれが合計 210 万のメトリック値 (1 つのメトリックに対して 1 年全体で 15 秒の値) を持つデータをクラスターにプッシュしています。各メトリック値のデータを読み書きしたくないので、前もって保存する metric_hours の完全なリストを計算し、最後にそれらをクラスターに送信します。挿入は、BEGIN BATCH ... END BATCH を使用して 50 のグループでバッチ処理されます。

約 5 ~ 6 分後、Cassandra クラスターは圧倒され、ヒープがいっぱいになり、ノードに障害が発生し始めます (応答しなくなるか、完全に停止します)。このセットアップを何度も実行しましたが、同じ結果が得られました。

各 cassandra ノードは、独自の専用ハードウェア、クアッド コア 2.3 GHz Intel i7 CPU、および 16 GB の物理 RAM (これらは Mac Mini Server マシンです。データは内部 SSD に永続化されます) で実行されます。cassandra-env を介して -Xmx および -Xmn を 2 ~ 8 GB の範囲で設定してみました。8GB で実行すると、クラスターの実行時間が長くなりますが、しばらくすると失敗します。

また、一貫性レベルを QUORUM に設定しました。これにより、クラスターが少し長く存続します。分かそこら。

すべての CQL クエリは、Datastax java-driver と CQL3 を使用して Cassandra クラスターに送信されます。row_cache のオンとオフを試しました。

Riak クラスターでまったく同じセットアップを実行すると、比較的長期間問題なく動作します。したがって、Cassandra のセットアップで何が改善できるのか、または何が間違っている可能性があるのか​​ 疑問に思っています。

4

1 に答える 1

2

ノードあたり10億行あり、後で説明する10億行数でRAMの問題に遭遇しました(cassandraにPlayOrmを使用)。

50 個のバッチが適切です。ただし、8500回の挿入だけでRAMが不足しているとは信じられません。それは意味がありません。どのバージョンを使用していますか? RAM の問題はブルームフィルターとインデックス サンプリングに関連しており、問題が発生するには 8G の RAM で 10 億に達する必要があります。

これから行おうとしているように行を増やすには、Leveled Compaction STrategy で 1.2.2 を試してください。インデックス サンプリング (cassandra.yaml) もおそらく下げることができます。Bloomfilters は、10 億行ごとに約 2 ギガの RAM を使用します。ノードごとに 10 億行を超える行があるため、メモリの問題が発生します。32 ギガの RAM マシンがありますが、jdk GC が 8G を超えると不良になるため、cassandra はそれを 8G RAM に自動構成します。最近、LCS でブルームフィルターをオフにできるようになるまで、JVM を 12G に引き上げました (これにより、ノードあたり 50 億行を処理できるようになることを願っています)。

1.1.4 から 1.2.2 に移行すると、RAM の使用量が大幅に削減されました (実際に今日アップグレードを実行していますが、本番環境のノード 5 でテストしたところ、同じ量の行に対して使用する RAM が大幅に減少していることがわかりました)。デフォルトではもうブルームフィルターを使用しないレベル化圧縮戦略に切り替えることで、50 億行の時系列データを取得したいと考えています (ブルームフィルターは RAM を消費し、より多くの行 = より多くの RAM が使用されます)。

ディーン

于 2013-03-05T13:50:27.007 に答える