1つのCassandraクラスタ(192.168.0.200経由で到達)から別のCassandraクラスタ(127.0.0.1経由で到達)に)データを転送したい。データは523行ですが、各行は約1 MBです。COPYFROMおよびCOPY TOコマンドを使用しています。COPYTOコマンドを発行すると、次のエラーが表示されます。
Error for (8948428671687021382, 9075041744804640605):
OperationTimedOut - errors={
'192.168.0.200': 'Client request timeout. See Session.execute[_async](timeout)'},
last_Host=192.168.0.200 (will try again later attempt 1 of 5).
~/.cassandra/cqlshrc
ファイルから:
[connection]
client_timeout = 5000
しかし、これは助けにはなりませんでした。
ここで使用しているCassandraのバージョンは明確でないため、3.0.xと仮定します。
COPY
関数は適切ですが、常に最良の選択であるとは限りません(つまり、大量のデータがある場合)。ただし、この場合は、cassandraで timeout settings の一部を確認することをお勧めします
ここのドキュメントは pagetimeout 設定も示しているので、役立つかもしれません。
2つのクラスター間でデータを移動する方法は、他にもいくつかあります。次のいずれかを使用できます。
もちろん#3と#4にはDSE cassandraが必要ですが、それはあなたにアイデアを与えるためだけです。ApacheCassandraまたはDatastaxを使用しているかどうかはわかりませんでしたエンタープライズCassandra。
とにかく、これが役に立てば幸いです!
接続のタイムアウトではなく、リクエストのタイムアウト(デフォルト:10秒)を増やしたい場合があります。
試してください:
cqlsh --request-timeout=6000
または追加:
[connection]
request_timeout = 6000
あなたの~/.cassandra/cqlshrc
ファイル。
コピーのタイムアウトに関しては、既に指摘したとおり、PAGETIMEOUTパラメータを使用するのが正しい方法です。
keyspace.tableを '/ dev/null'にコピーしてWITH PAGETIMEOUT = 10000;
Cqlshで--request-timeout = 6000を設定しようとしても、その状況では役に立ちません。
こんにちは以下のほかに、
1。墓石の確認
In cassandra墓石は読み取りのパフォーマンスを低下させ、次の問題が発生しますOperationTimedOut:errors = {'127.0.0.1': 'Client request timeout。See Session.execute_async'}、last_Host = 127.0.0.1
注
列にnull値を含むテーブルにデータを挿入すると、トゥームストーンが作成されます。テーブル内のnull挿入を回避する必要があります。
unset( https://docs.datastax.com/en/latest-csharp -driver-api/html/T_Cassandra_Unset.htm )およびignoreNulls( https://github.com/datastax/spark -cassandra-connector/blob/master/doc/5_saving.md )Sparkのプロパティ。
次のコマンドを使用して、テーブルのステータスを確認できます
nodetool tablestats keyspace1.tablename
2。トゥームストーンを削除
単一のノードで作業している場合は、テーブルのALTER table keyspace1.tablename WITHgc_grace_seconds= '0';を変更することにより、トゥームストーンを削除できます。
3.read_request_timeout_in_ms:読み取りリクエストのタイムアウトを増やすために、cassandra.yamlファイルの値を設定します