2013-01-25 9 views
13

Abbiamo molti dati di interazione dell'utente da vari siti Web archiviati in Cassandra come cookie, visite alla pagina, annunci visualizzati, clic sugli annunci, ecc. Che vorremmo fare riferire su Il nostro attuale schema di Cassandra supporta il reporting e l'interrogazione di base. Tuttavia, vorremmo anche creare query di grandi dimensioni che coinvolgessero in genere join su famiglie di colonne di grandi dimensioni (contenenti milioni di righe).Analitica e data mining di dati seduti su Cassandra

Quale approccio è più adatto per questo? Una possibilità è estrarre i dati in un database relazionale come mySQL e fare il data mining qui. Alternativo potrebbe essere quello di tentare l'uso di hadoop con alveare o maiale per eseguire la mappa ridurre le query per questo scopo? Devo ammettere che non ho esperienza con quest'ultimo.

Chiunque ha esperienza delle differenze di prestazioni in una contro l'altra? Vuoi eseguire la mappa ridurre le query su un'istanza di produzione di Cassandra in tempo reale o su una copia di backup per evitare che il carico della query influenzi le prestazioni di scrittura?

risposta

8

Disclosure: Sono un tecnico presso DataStax.

Oltre ai suggerimenti di Charles, è possibile esaminare DataStax Enterprise (DSE), che offre una buona integrazione di Cassandra con Hadoop, Hive, Pig e Mahout.

Come ha detto Charles, non si desidera eseguire l'analisi direttamente sui nodi Cassandra che gestiscono le esigenze delle applicazioni in tempo reale poiché possono avere un impatto sostanziale sulle prestazioni. Per evitarlo, DSE ti consente di dedicare una parte del tuo cluster rigorosamente all'analisi utilizzando più "datacenter" virtuali (nel senso del termine NetworkToplogyStrategy). Le query eseguite come parte di un lavoro Hadoop avranno un impatto solo su quei nodi, lasciando sostanzialmente inalterati i normali nodi di Cassandra. Inoltre, è possibile ridimensionare ciascuna porzione del cluster separatamente o in base alle proprie esigenze di prestazioni.

Ci sono un paio di aspetti positivi dell'approccio DSE. Il primo è che non è necessario eseguire alcun ETL prima di elaborare i dati; I normali meccanismi di replica di Cassandra mantengono aggiornati i nodi dedicati all'analisi. In secondo luogo, non è necessario un cluster Hadoop esterno. DSE include una sostituzione drop-in per HDFS chiamata CFS (CassandraFS), quindi tutti i dati di origine, i risultati intermedi e i risultati finali di un lavoro Hadoop possono essere archiviati nel cluster Cassandra.

+0

Ciao Tyler, grazie mille! Hai sollevato una prospettiva estremamente interessante! Puoi indicarmi qualche documentazione che dettaglia la capacità di DSE di dedicare una parte di un cluster di Cassandra all'analisi? –

+0

Ho difficoltà a trovare una singola pagina che riepiloga, ma ho letto su [NetworkTopologyStrategy] (http://www.datastax.com/docs/1.1/cluster_architecture/replication#networktopologystrategy) (se non hai familiarità con esso). I dati CFS hanno solo repliche nell'analisi "DC", ei dati di Cassandra hanno repliche in entrambi. I normali nodi Cassandra possono scrivere su LOCAL_QUORUM e i nodi di analisi possono leggere su LOCAL_QUORUM, quindi nessuno dei due controller avrà un impatto significativo sulle prestazioni dell'altro. Questo può anche essere utile: http://www.datastax.com/docs/1.1/cluster_architecture/about_client_requests –

+0

Grazie Tyler, sono stato in grado di leggere sull'argomento e questo risolve molti dei nostri problemi. Cercheremo sicuramente di procedere con questo approccio. –

13

Nella mia esperienza Cassandra è più adatto a processi in cui è necessario accedere in tempo reale ai dati, letture casuali veloci e in genere gestire carichi di traffico elevati. Tuttavia, se inizi a fare analisi complesse, la disponibilità del tuo cluster Cassandra probabilmente ne risentirà notevolmente. In generale, da quello che ho visto è nel tuo interesse lasciare il cluster di Cassandra da solo, altrimenti la disponibilità inizia a soffrire.

Sembra che tu abbia bisogno di una piattaforma di analisi e ti consiglio di esportare i tuoi dati di segnalazione da Cassandra per utilizzarli in un sistema di data warehouse offline.

Se ci si può permettere, disporre di un vero data warehouse consente di eseguire query complesse con join complessi su tabelle multiple. Questi sistemi data-warehouse sono ampiamente utilizzati per la segnalazione, ecco un elenco di ciò che sono, a mio parere i giocatori chiave:

  • Netezza
  • Aster/Teradata
  • Vertica

Un recente uno che sta guadagnando molto slancio è Amazon Redshift, ma è attualmente in beta, ma se riesci a metterlo tra le mani potresti provare a farlo dato che sembra una solida piattaforma di analisi con un prezzo molto più attraente di quanto sopra soluzioni.

Alternative come l'uso di Hadoop MapReduce/Hive/Pig sono anche interessanti da guardare, ma probabilmente non sostituiscono le tecnologie Hadoop. Consiglierei Hive se hai uno sfondo SQL perché sarà molto facile capire cosa stai facendo e puoi scalare facilmente. In realtà esistono già librerie integrate con Hadoop, come Apache Mahout, che consentono di eseguire il data mining su un cluster Hadoop, dovresti assolutamente provare e vedere se soddisfa le tue esigenze.

Per darvi un'idea, un approccio che ho usato che ha funzionato bene finora è la pre-aggregazione dei risultati in Hive e quindi i report stessi generati in un data warehouse come Netezza per calcolare join complessi .

+1

Grazie mille per i vostri commenti perspicaci. Ho infatti trovato un altro articolo [qui.] (Https://www.quantivo.com/blog/top-5-reasons-not-use-hadoop-analytics). I pensieri ci fanno eco in termini di utilizzo dell'alveare/hadoop. Ora credo che l'uso di hadoop/hive/pig per pre-aggregare i dati e poi effettuare il dump in un data warehouse relazionale per l'analisi sia la strada giusta da percorrere. –