2015-04-01 18 views
13

Ho un cluster di tre nodi Cassandra e ho creato una tabella con oltre 2.000.000 di righe.Errore di timeout dell'operazione nella console cqlsh di cassandra

Quando eseguo questo (select count(*) from userdetails) query in cqlsh, ho ottenuto questo errore:

OperationTimedOut: errors={}, last_host=192.168.1.2

Quando eseguo funzione di conteggio per meno riga o con il limite di 50.000 funziona benissimo.

risposta

14

count (*) effettivamente pagine attraverso tutti i dati. Quindi ci si aspetta che un select count(*) from userdetails senza limite si interrompa con quel numero di righe. Alcuni dettagli qui: http://planetcassandra.org/blog/counting-key-in-cassandra/

Si può prendere in considerazione il mantenimento della te contano, utilizzando Spark, o se volete semplicemente un numero di parcheggio palla si può afferrare da JMX.

Per prendere JMX può essere un po 'complicato a seconda del modello di dati. Per ottenere il numero di partizioni afferrare l'org.apache.cassandra.metrics:type=ColumnFamily,keyspace={{Keyspace}},scope={{Table​}},name=EstimatedColumnCountHistogram mbean e sommare tutti i 90 valori (questo è ciò che produce gli output nodetool cfstats). Ti darà solo il numero che esiste in sstables in modo da renderlo più preciso puoi fare un flush o provare a stimare il numero in memobles dal mbean

+0

Ti prego, mi puoi dire in dettaglio a come ottenere da JMX? – Kaushal

+0

aggiunto in modifica sopra per la formattazione –

+0

+1 su cui è stato effettuato un aumento. Un'altra alternativa (per contenere il "conteggio" sulla quantità di record) sarebbe quella di utilizzare i contatori distribuiti di Cassandra per quello (in un CF separato, semplicemente incrementarlo su ogni inserto). Dovrai recuperare la quantità corrente di righe (eseguirne iterazione nel codice, ad esempio) per fornire l'importo iniziale di seme al momento dell'impostazione. – ChristopheD

2

se usi cqlsh: apri lo script nell'editor e trova tutto parole "timeout". Cambia il valore predefinito da 10 a 60 e salva lo script.

+2

come fare, se non si tratta di script per il file di configurazione –

0

avere lo stesso problema come sopra se faccio un conteggio per un giorno, ma come un lavoro in giro, ho diviso il conto in due richieste (12 ore + 12 ore), come di seguito.

cqlsh:jw_schema1> select count(*) from flight_statistics where insert_time >= '2015-08-20 00:00:00' and insert_time <= '2015-08-20 11:59:59' ALLOW FILTERING; 

count 
------- 
42528 

(1 rows) 
cqlsh:jw_schema1> select count(*) from flight_statistics where insert_time >= '2015-08-20 12:00:00' and insert_time <= '2015-08-20 23:59:59' ALLOW FILTERING; 

count 
------- 
86580 

(1 rows) 
cqlsh:jw_schema1> 
2

sto usando Cassandra 3.4 e cqlsh per ottenere conteggi di record. Sembra che ci sia stato un cambio di codice in 3.4. cqlsh chiama semplicemente cqlsh.py. All'interno di cqlsh.py esiste una variabile DEFAULT_REQUEST_TIMEOUT_SECONDS che assume come valore predefinito 10 (secondi). L'ho cambiato in 3600 (1 ora) e ora funzionano le mie query SELECT count(*).

9

È possibile anche aumentare il timeout nel comando cqlsh, ad es .:

cqlsh --request-timeout 120 myhost 
Problemi correlati