web-dev-qa-db-fra.com

Erreur Cassandra CQLSH OperationTimedOut = Délai d'attente de la demande du client. Voir Session.execute [_async] (délai d'attente)

Je souhaite transférer des données d'un cluster Cassandra (atteint via 192.168.0.200) vers un autre cluster Cassandra (atteint via 127.0.0.1). Les données sont 523 lignes mais chaque ligne est d'environ 1 Mo. J'utilise les commandes COPY FROM et COPY TO. Je reçois le message d'erreur suivant lorsque j'émets la commande COPY TO:

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).

J'ai essayé de changer le fichier ~/.cassandra/cqlshrc en:

[connection]
client_timeout = 5000

Mais cela n'a pas aidé.

12
Rishabh Poddar

On ne sait pas quelle version de Cassandra vous utilisez ici, donc je vais supposer que la version 3.0.x

La fonction COPY est bonne mais pas toujours le meilleur choix (c'est-à-dire si vous avez beaucoup de données), cependant, pour cela, vous pouvez vérifier certains de vos paramètres timeout dans cassandra

La documentation ici affiche également un paramètre pagetimeout qui peut vous aider.

Le transfert de données entre deux clusters peut être effectué de différentes manières. Vous pouvez utiliser l'un des éléments suivants:

  1. Le sstableloader
  2. Un des pilotes comme le pilote Java
  3. Utilisation de spark pour copier des données d’un cluster à un autre, comme dans cet exemple
  4. Utiliser OpsCenter pour cloner un cluster
  5. Le chargeur en vrac cassandra (je connais un certain nombre de personnes qui l'utilisent)

Bien sûr, les n ° 3 et n ° 4 ont besoin de DSE cassandra mais c’est juste pour vous donner une idée. Je ne savais pas si vous utilisiez Apache Cassandra ou Datastax Enterprise Cassandra.

Quoi qu'il en soit, espérons que cela aide!

2
markc

Vous souhaiterez peut-être incrémenter le délai d'attente de la requête (par défaut: 10 secondes), pas le délai de connexion.

Essayer:

cqlsh --request-timeout=6000

ou ajouter:

[connection]
request_timeout = 6000

dans votre fichier ~/.cassandra/cqlshrc.

13
Luca Gibelli

En ce qui concerne le délai de copie, la méthode correcte consiste à utiliser le paramètre PAGETIMEOUT comme déjà indiqué.

copier keyspace.table dans '/ dev/null' WITH PAGETIMEOUT = 10000;

Essayer de définir le paramètre --request-timeout = 6000 avec cqlsh n'aide pas dans cette situation.

3

Salut à part ce qui suit,

1.Vérifier les pierres tombales
Dans Cassandra, les pierres tombales dégradent les performances des lectures et un problème suivant se produit OperationTimedOut: errors = {'127.0.0.1': 'Délai d'attente de la demande du client. Voir Session.execute_async '}, last_Host = 127.0.0.1
Remarque
Lorsque nous insérons des données dans la table avec des valeurs NULL dans des colonnes, cela crée une pierre tombale. nous devons éviter les insertions nulles à l'intérieur de la table.
Plusieurs options sont disponibles, telles que unset ( https://docs.datastax.com/en/latest-csharp-driver-api/html/T_Cassandra_Unset.htm ) et ignoreNulls ( https://github.com/datastax/spark-cassandra-connector/blob/master/doc/5_saving.md ) dans la propriété spark.
Vous pouvez vérifier l'état de votre table à l'aide de la commande suivante
nodetool tablestats keyspace1.tablename

2.Retirer les pierres tombales
Si vous travaillez sur un seul noeud, vous pouvez supprimer les pierres tombales en modifiant votre table ALTER table keyspace1.tablename WITH gc_grace_seconds = '0'; 

3.read_request_timeout_in_ms: configurez la valeur dans le fichier cassandra.yaml pour augmenter le délai d'attente pour une demande de lecture

1
Hitesh Shahani