0

Apache cassandra の使用に問題があります。私は数週間この問題を解決しようとしています。

これが私のセットアップです。Apache cassandra を実行している 2 台のコンピューター (コンピューター C1 とコンピューター C2 と呼びましょう) があり、レプリケーション ファクター 2 でキースペースを作成します。これは、各コンピューターがデータのローカル コピーを持つようにするためです。

約 500MB のかなり大量のデータを読み取るプログラムがあります。

シナリオ 1) コンピューター C1 のみで cassandra が実行されているとします。コンピューター C1 で読み取りプログラムを実行すると、この読み取りは 30 分から 1 分で発生します。

シナリオ 2) コンピューター C2 で cassandra インスタンスを開始し、コンピューター C1 で読み取りプログラムを再度実行します。完了までに 20 分程度の非常に長い時間がかかります。

なぜこれが起こっているのかわかりません。読み取り整合性は「1」に設定されています

期待される性能

理想的には、コンピューター C1 と C2 の両方の読み取りプログラムが高速に完了する必要があります。これは、両方のコンピューターにデータのローカル コピーがあるため可能です。

誰でも私を正しい方向に向けることができますか? 助けてくれて本当にありがとう、ありがとう

更新: ネットワークの使用状況

これはあまり意味がないかもしれませんが、nethogs を使用してインターネット接続を監視し、両方の cassandra ノードが稼働していて、データベースを読み取ると、帯域幅が cassandra によって他のノードと通信するために使用されます。おそらく、これはバックグラウンドで発生する読み取り修復です。私は読み取り整合性レベル「1」を使用しました。私の場合、必要なデータを持つ最も近いノードはローカル コンピューターの cassandra インスタンスです (すべてのノードにすべてのデータがあります)。したがって、データのソースはローカル コンピューターからのものである必要があります。 .

更新: SQLTransentExceptions: TimedOutException()

ただし、両方のノードが起動している場合、データベースを読み取るプログラムには、いくつかの SQLTransentExceptions: TimedOutException() があります。デフォルトのタイムアウトの 10 秒を使用します。しかし、すべてのデータ取得はローカル インスタンスから行う必要があるのに、なぜ SQL ステートメントがタイムアウトになるのかという疑問が生じます。また、1 つのノードのみが稼働している場合、同じ SQL コードが正常に実行されます。

4

2 に答える 2

1

「ANY」の読み取り整合性(書き込みにのみ適用される)などはありません。最も低い読み取り整合性は1です。読み取りの一貫性が実際に何であるかを確認する必要があります。

おそらく、構成は、読み取りで両方のサーバーからのデータをフェッチする必要があり(両方が稼働している場合)、C2からC1へのデータのフェッチが非常に遅いように設定されています。

読み取り整合性レベルを「ONE」に強制的に設定します。

于 2013-01-18T22:41:20.567 に答える
0

トークンの衝突があるようです。この場合、両方のノードが100%のキーを所有していることになります。必要なのは、トークンの半分を所有するようにノードの1つを再割り当てすることです。nodetool move(トークン85070591730234615865843651857942052864を使用)の後に。を使用しますnodetool cleanup

速度が遅いのは、ネットワークレイテンシが高いためである可能性が高く、すべてのトランザクションで乗算すると(一部のサブセットが実際にタイムアウトになる)、それに応じてジョブ時間が長くなります。多くのクライアントライブラリは、自動ノード検出を使用して、新しいノードまたはダウンしたノードについて学習し、使用可能なノード間でロビン要求をラウンドします。したがって、ローカルホストについてのみ説明している場合でも、おそらく他のノードについて独自に学習している可能性があります。

ノードが通信する必要のある分散コンピューティング環境では、ネットワークの遅延と信頼性が大きな要因であり、対処する必要があります。

于 2013-01-19T23:04:21.610 に答える