2016-01-18 30 views
7

Sto tentando di connettersi a HiveServer2 tramite i driver JDBC da R utilizzando il pacchetto RJDBC. Ho visto un'ampia spiegazione sul passaggio di argomenti aggiuntivi al wrapper dbConnect per vari drivers (What arguments can I pass to dbConnect?), ma sembra che la situazione con JDBCDriver sia un po 'più complicata rispetto ad altri driver. Posso collegarmi a HiveServer2 sotto questo indirizzo URL specifico url = paste0("jdbc:hive2://", host = 'tools-1.hadoop.srv', ":", port = 10000, "/loghost;auth=noSasl"). Il codice correspoding funziona e mi permette di scrivere istruzioni su Hive da RPassare parametri aggiuntivi alla funzione dbConnect per JDBCDriver in R

library(RJDBC) 
dbConnect(drv = JDBC(driverClass = "org.apache.hive.jdbc.HiveDriver", 
        classPath = c("/opt/hive/lib/hive-jdbc-1.0.0-standalone.jar", 
            "/usr/share/hadoop/share/hadoop/common/lib/commons-configuration-1.6.jar", 
            "/usr/share/hadoop/share/hadoop/common/hadoop-common-2.4.1.jar"), 
        identifier.quote = "`"), # to juz niekoniecznie jest potrzebne 
      url = paste0("jdbc:hive2://", host = 'tools-1.hadoop.srv', ":", port = 10000, "/loghost;auth=noSasl"), 
      username = "mkosinski") -> conn 

Mi chiedo se c'è un modo per passare gli argomenti come il nome del database (loghost) o un no_authentication_mode (auth=noSasl) a ... in dbConnect tale che ho potuto specificare solo l'indirizzo URL standard (url = paste0("jdbc:hive2://", host = 'tools-1.hadoop.srv', ":", port = 10000)) e in qualche modo passare il resto dei parametri predefiniti come questo

library(RJDBC) 
dbConnect(drv = JDBC(driverClass = "org.apache.hive.jdbc.HiveDriver", 
        classPath = c("/opt/hive/lib/hive-jdbc-1.0.0-standalone.jar", 
            "/usr/share/hadoop/share/hadoop/common/lib/commons-configuration-1.6.jar", 
            "/usr/share/hadoop/share/hadoop/common/hadoop-common-2.4.1.jar"), 
        identifier.quote = "`"), # to juz niekoniecznie jest potrzebne 
      url = paste0("jdbc:hive2://", host = 'tools-1.hadoop.srv', ":", port = 10000), 
      username = "mkosinski", dbname = "loghost", auth = "noSasl") -> conn 

Ma il secondo approccio non sembra al lavoro, nonostante le varie combi nazioni di nomi e valori di argomenti addizionali che cerco.

Qualcuno sa come passare argomenti aggiuntivi a DBI :: dbConnect tramite il parametro ... per JDBCDriver?

+0

In realtà l'URL potrebbe ottenere così complicato come 'JDBC: hive2: // : /; principal = alveare/_HOST @; ssl = true; sslTrustStore = ; trustStorePassword = ; transportMode = http; httpPath = 'con autenticazione Kerberos e trasporto HTTPS con certificati SSL fittizi. E ancora peggio quando si lancia l'High Availability basata sul quorum di ZooKeeper (non è uno scherzo, abbiamo tutti questi in Prod ...) –

+0

Ho capito @SamsonScharfrichter :). È piuttosto interessante. Ma qual è la soluzione alla mia domanda? Come posso passare quei parametri? –

+1

Non ho idea se e come, è possibile passare tutte queste opzioni/parametri URL come parametri JDBC. Le opzioni SSL sono effettivamente utilizzate dal driver, quindi è probabile che debbano essere impostate sull'URL; il database può essere modificato dinamicamente in qualsiasi momento usando una * istruzione * (ad esempio 'use MY_DB'); per il resto ... hai provato a connetterti con DBVisualizer o uno strumento simile, quindi controlla l'elenco dei parametri JDBC e i loro valori predefiniti? –

risposta

1

Secondo la risposta dell'autore: https://github.com/s-u/RJDBC/issues/31#issuecomment-173934951

Semplicemente nulla - tutto ciò che Collega database fa è quello di raccogliere tutto ciò che passaggio (compreso ...) e raccogliere il tutto in un dizionario di proprietà (java. util.Properties) che viene passato al metodo connect() del driver. Quindi ogni argomento chiamato che passi è incluso. Quindi l'unico argomento speciale è url che viene passato direttamente, tutto il resto è incluso nelle proprietà. Il modo in cui viene interpretato è dalle mani di RJDBC: dipende interamente dal driver.

Problemi correlati