2016-01-18 88 views
7

我試圖通過JDBC連接到HiveServer2驅動程序從R使用RJDBC包。我已經看到了一個關於將各種driversWhat arguments can I pass to dbConnect?)的dbConnect封裝器傳遞給其他參數的廣義解釋,但是看起來JDBCDriver的情況比其他驅動器有點技巧。我可以在此特定URL地址url = paste0("jdbc:hive2://", host = 'tools-1.hadoop.srv', ":", port = 10000, "/loghost;auth=noSasl")下連接到HiveServer2。把對應的代碼的工作,使我我想知道寫Hive語句從R將附加參數傳遞給JDBCDriver的dbConnect函數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 

如果傳遞到...參數,如數據庫名稱(loghost)或no_authentication_mode(auth=noSasl)在dbConnect這樣的方式我只能指定標準的URL地址(url = paste0("jdbc:hive2://", host = 'tools-1.hadoop.srv', ":", port = 10000)),以及某種方式傳遞parametrs其餘像這樣

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 

但第二種方法看起來不工作,儘管各種COMBI我嘗試的額外論點的名稱和價值國家。

有誰知道如何通過...參數爲JDBCDriver傳遞附加參數到DBI :: dbConnect?

+0

實際上,URL可以得到一樣複雜'JDBC:hive2:// /;主=蜂巢/ _HOST @; SSL = TRUE; sslTrustStore = ; trustStorePassword = ; transportMode = http; httpPath = ',使用Kerberos身份驗證和HTTPS傳輸並使用虛擬SSL證書。更糟糕的是,當拋出基於ZooKeeper法定人數的高可用性(這不是玩笑,我們在Prod中有所有這些...) –

+0

我明白了@SamsonScharfrichter :)。這很有趣。但是我的問題的解決方案是什麼?我怎樣才能通過這些參數? –

+1

我不知道是否以及如何將所有這些URL選項/參數作爲JDBC參數傳遞。 SSL選項實際上由驅動程序使用,因此可能必須在URL上設置;數據庫可以隨時使用*語句*動態更改(即'使用MY_DB');其餘的......你是否嘗試連接DBVisualizer或類似的工具,然後檢查JDBC參數列表及其默認值? –

回答

1

根據筆者的回答是:https://github.com/s-u/RJDBC/issues/31#issuecomment-173934951

了簡單的東西 - 所有的數據庫連接的作用是收集任何你 通(包括......),並收集所有到一個屬性字典 (java中。 util.Properties)傳遞給驅動程序的連接() 方法。所以你傳遞的任何命名參數都包含在內。因此,唯一的 特殊參數是直接傳遞的url,其他所有內容都包含在屬性中的 。如何得到解釋是不完全的 RJDBC的手 - 這完全取決於司機。