2016-01-18 2 views
7

Ich versuche, eine Verbindung zu HiveServer2 über JDBC Treiber von R mit RJDBC Paket herzustellen. Ich habe eine breite Erklärung über die Übergabe zusätzlicher Argumente zu dbConnect Wrapper für verschiedene drivers (What arguments can I pass to dbConnect?) gesehen, aber es scheint, dass die Situation mit JDBCDriver ist ein bisschen trickerer als für andere Treiber. Ich kann eine Verbindung zu HiveServer2 unter dieser spezifischen URL-Adresse url = paste0("jdbc:hive2://", host = 'tools-1.hadoop.srv', ":", port = 10000, "/loghost;auth=noSasl") herstellen. Der correspoding Code funktioniert und ermöglicht es mir, Aussagen von RÜbergeben von zusätzlichen Parametern zur dbConnect-Funktion für 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 

auf Hive zu schreiben Ich frage mich, ob es einen Weg gibt, Argumente zu übergeben, wie Datenbankname (loghost) oder einem no_authentication_mode (auth=noSasl) zu ... in dbConnect solchen dass ich nur Standard-URL-Adresse (url = paste0("jdbc:hive2://", host = 'tools-1.hadoop.srv', ":", port = 10000)) angeben konnte und irgendwie den Rest parametrs wie diese Arbeit

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 

Aber der zweite Ansatz sieht nicht passieren, trotz der verschiedenen Kombi Nationen von Namen und Werte von zusätzlichen Argumenten versuche ich.

Kann jemand zusätzliche Argumente zu DBI :: dbConnect über ... Parameter für JDBCDriver übergeben?

+0

Eigentlich könnte die URL so kompliziert, wie 'jdbc erhalten: hive2: // : /; Haupt = Nest/_HOST @; ssl = true; sslTrustStore = ; truststore = ; transportMode = http; httpPath = 'mit Kerberos-Authentifizierung und HTTPS-Transport mit Dummy-SSL-Zertifikaten. Und noch schlimmer, wenn wir High Availability basierend auf ZooKeeper-Quorum werfen (das ist kein Witz, wir haben all diese in Prod ...) –

+0

Ich bekomme es @SamsonScharfrichter :). Das ist ziemlich interessant. Aber was ist die Lösung für meine Frage? Wie kann ich diese Params weitergeben? –

+1

Ich habe keine Ahnung, ob und wie Sie alle diese URL-Optionen/Parameter als JDBC-Parameter übergeben können. Die SSL-Optionen werden tatsächlich vom Treiber verwendet, sodass sie wahrscheinlich auf die URL festgelegt werden müssen. die Datenbank kann jederzeit dynamisch geändert werden unter Verwendung einer * Anweisung * (d. h. 'MY_DB' verwenden); für den Rest ... haben Sie versucht, eine Verbindung mit DBVisualizer oder einem ähnlichen Tool herzustellen, dann überprüfen Sie die Liste der JDBC-Parameter und deren Standardwerte? –

Antwort

1

Nach der Antwort des Autors: https://github.com/s-u/RJDBC/issues/31#issuecomment-173934951

einfach alles - alles, was dbConnect tut, ist, was Sie Pass (einschließlich ...) zu sammeln und sie alle in eine Eigenschaft Wörterbuch (Java zu sammeln. util.Properties), die an die Methode connect() des Treibers übergeben wird. Also ist jedes benannte Argument, das du passierst, enthalten. Also das einzige spezielle Argument ist URL, die direkt übergeben wird, alles andere ist in den Eigenschaften enthalten. Wie das interpretiert wird, ist aus RJDBC Hände - es liegt ganz bei dem Treiber.

Verwandte Themen