2014-07-08 19 views
6

Attualmente stiamo costruendo una piattaforma di reportistica come un archivio dati utilizzato Shark. Poiché lo sviluppo di Shark viene interrotto, siamo nella fase di valutazione di Spark SQL. Sulla base dei casi d'uso che abbiamo abbiamo avuto alcune domande.Supporto Spark Sql JDBC

1) Abbiamo dati da varie fonti (MySQL, Oracle, Cassandra, Mongo). Vorremmo sapere come possiamo ottenere questi dati in Spark SQL? Esiste qualche utilità che possiamo usare? Questa utility supporta l'aggiornamento continuo dei dati (sincronizzazione del nuovo add/update/delete sull'archivio dati su Spark SQL?

2) È un modo per creare più database in Spark SQL?

3) Per l'interfaccia utente di Report utilizziamo Jasper, ci piacerebbe connettersi da Jasper a Spark SQL. Quando abbiamo effettuato la nostra ricerca iniziale, ora sappiamo che non esiste alcun supporto per il consumatore per connettere Spark SQL tramite JDBC, ma nelle versioni future ti piacerebbe aggiungere lo stesso. Vorremmo sapere quando Spark SQL avrà una versione stabile che avrebbe il supporto JDBC? Nel frattempo abbiamo preso il codice sorgente da https://github.com/amplab/shark/tree/sparkSql ma abbiamo avuto qualche difficoltà a configurarlo localmente e a valutarlo. Sarebbe bello se tu potessi aiutarci con le istruzioni di installazione. (Posso condividere il problema che stiamo affrontando per favore fammi sapere dove posso pubblicare i log degli errori)

4) Avremmo anche bisogno di un prompt SQL dove possiamo eseguire query, attualmente Spark Shell fornisce il prompt SCALA in cui è possibile eseguire il codice SCALA, dal codice SCALA è possibile eseguire query SQL. Come Shark vorremmo avere il prompt SQL in Spark SQL. Quando abbiamo fatto la nostra ricerca, abbiamo scoperto che nella prossima versione di Spark questo sarebbe stato aggiunto. Sarebbe fantastico se potesse dirci quale versione di Spark avrebbe affrontato la stessa cosa.

+0

Ciao, sto cercando di memorizzare i dati dalla scintilla di Apache a mysql. Hai trovato qualche soluzione alla tua domanda? Se sì, puoi condividere come stai stabilendo la comunicazione tra spark e mysql? Questo sarà di grande aiuto per me. Grazie –

risposta

1

posso rispondere (1):

Apache Sqoop è stata realizzata appositamente per risolvere questo problema per i database relazionali. Lo strumento è stato realizzato per HDFS, HBase e Hive - in quanto tale può essere utilizzato per rendere i dati disponibili a Spark, tramite HDFS e il metastore Hive.

http://sqoop.apache.org/

credo Cassandra è disponibile per SparkContext tramite questo connettore da DataStax: https://github.com/datastax/spark-cassandra-connector - che non ho mai usato.

Non sono a conoscenza di alcun connettore per MongoDB.

0

Spark SQL è una funzionalità del framework Spark. Non dovrebbe essere paragonato a Shark perché Shark è un servizio. (Ricorda che con Shark, esegui un ThriftServer a cui puoi connetterti dalla tua app Thrift o anche ODBC.)

Puoi approfondire cosa intendi per "ottenere questi dati in Spark SQL"?

2

come per

3) Spark 1.1 fornisce un migliore supporto per l'interfaccia SparkSQL ThriftServer, che si consiglia di utilizzare per JDBC interfacciamento. I client JDBC Hive che supportano v. 0.12.0 sono in grado di connettersi e interfacciarsi con tale server.

4) Spark 1.1 fornisce anche un'interfaccia CLI SparkSQL che può essere utilizzata per immettere le query. Allo stesso modo che Hive CLI o Impala Shell.

Si prega di fornire maggiori dettagli su ciò che si sta cercando di ottenere per 1 e 2.

1

1) Abbiamo dati provenienti da varie fonti (MySQL, Oracle, Cassandra, Mongo)

è necessario utilizzare driver diverso per ciascun caso. Per cassandra c'è datastax driver (ma ho riscontrato alcuni problemi di compatibilità con SparkSQL). Per qualsiasi sistema SQL è possibile utilizzare JdbcRDD. L'utilizzo è molto semplice, guarda the scala example:

test("basic functionality") { 
    sc = new SparkContext("local", "test") 
    val rdd = new JdbcRDD(
     sc, 
    () => { DriverManager.getConnection("jdbc:derby:target/JdbcRDDSuiteDb") }, 
     "SELECT DATA FROM FOO WHERE ? <= ID AND ID <= ?", 
     1, 100, 3, 
     (r: ResultSet) => { r.getInt(1) }).cache() 

    assert(rdd.count === 100) 
    assert(rdd.reduce(_+_) === 10100) 
    } 

Ma nozione che è solo un RDD, così si dovrebbe lavorare con questi dati attraverso la mappa-ridurre le api, non in SqlContext.

Esiste qualche utilità che possiamo usare?

C'è il progetto Apache Sqoop ma è in stato di sviluppo attivo. L'attuale versione stabile non salva nemmeno i file nel formato parquet.