2014-07-22 25 views
16

Sto usando Cassandra 2.0.9 per memorizzare grandi quantità di dati, diciamo 100Gb, in una famiglia di colonne. Vorrei esportare questi dati in formato CSV in modo rapido. Ho provato:Esportare una grande quantità di dati da Cassandra a CSV

  • sstable2json - produce abbastanza grande file JSON che sono difficili da analizzare - in quanto strumento mette i dati in una riga e usa lo schema complicato, ci vuole (ex 300Mb di file di dati = ~ 2 Gb JSON.) un sacco di tempo per scaricare e Cassandra piace cambiare i nomi dei file sorgente secondo il suo meccanismo interno
  • COPIA - fa sì che i timeout su istanze EC2 abbastanza veloce per gran numero di record
  • CAPTURE - come sopra, provoca timeout
  • legge con impaginazione - ho usato timeuuid per esso, ma restituisce circa 1,5k record al secondo

Io uso Amazon istanza EC2 con memorizzazione veloce, 15 GB di RAM e 4 core

Is esiste un'opzione migliore per esportare gigabyte di dati da Cassandra a CSV?

+0

Hai pensato di creare il tuo piccolo aggeggio per questo? Usando il driver datastax puoi facilmente fare richieste che estraggono i tuoi dati e serializzarli in un file csv con poco o nessun codice java? Ciò garantirebbe di ottenere il risultato esatto desiderato (con un piccolo sforzo però). – Ar3s

+0

Inoltre, non ho né il metodo né il problema sul "read with pagination". – Ar3s

+1

* legge con paginazione * - usando il driver python Ho provato a leggere il contenuto usando limite (valori testati 100 - 10000, basati su TimeUuid) e offset, era molto lento, Cassandra era in grado di leggere circa 1,5k di record al secondo su 3 istanze e fattore di replicazione 2 Non riesco a immaginare, che il semplice utilizzo del driver renderà possibile la lettura veloce, poiché per ogni riga Cassandra deve verificare quali dati del nodo sono memorizzati. – KrzysztofZalasa

risposta

3

Perché usare COPY sarà piuttosto impegnativo quando si tenta di esportare una tabella con milioni di righe da Cassandra, quindi quello che ho fatto è creare uno strumento semplice per ottenere il pezzo di dati da un chunk (impaginato) dalla tabella cassandra e esportalo in CSV.

Guarda il mio example solution utilizzando la libreria java da datastax.

+0

si prega di fornire una risposta completa, non solo un collegamento – slfan

+0

Come ho già scritto: ho provato questa soluzione, ma è stata molto lenta - potrebbe fornire 1,5k di record al secondo. Hai qualche benchmark per il set di repliche e 100 GB di dati? – KrzysztofZalasa

+0

La tabella più grande nei nostri set di dati era: 22 GB di dati ~ 122 milioni di righe ~ estratte in 444m38.061 s. (usando 1 host server cassandra 4core 8gb ram sata hdd) (che è circa 4,5k di file/secondo, questo è abbastanza buono per noi perché lo facciamo solo per migrare i dati in qualche altro posto) –

Problemi correlati