簡體   English   中英

在R中的Amazon EMR上使用JDBC驅動程序進行Hive

[英]Using JDBC Driver for Hive on Amazon EMR in R

Amazon 提供了用於連接到Hive 的JDBC驅動程序 R有一個JDBC包似乎應該可以使用這些驅動程序並允許訪問Hive。 實際上,其他人顯然能夠使用JDBC從R訪問Hive

我沒有那么幸運。 我已經按照亞馬遜提供說明通過SQL Workbench / J成功使用了亞馬遜驅動程序從Hive中提取一些數據。 因此,我知道在實踐中,Amazon JDBC驅動程序中包含的.jars足以連接到我的EMR集群上的Hive(0.13.1)版本,我也知道SSH隧道已正確設置。

看起來下面的R代碼應該足以連接到EMR集群上的Hive(遵循與SQL Workbench / J類似的配置選項,以及從“使用JDBC從R使用Hive”博客帖子中獲得一些注釋):

if (!require("DBI")) {install.packages("DBI");library("DBI")}
if (!require("rJava")) {install.packages("rJava");library("rJava")}
if (!require("RJDBC")) {install.packages("RJDBC",dep=TRUE);library("RJDBC")}
JDBCLib <- "~/AmazonHiveJDBC/1.0.0.1000/"
for(l in list.files(JDBCLib)){ .jaddClassPath(paste(JDBCLib,l,sep=""))}
drv <- JDBC("com.amazon.hive.jdbc3.HS2Driver", paste0(JDBCLib,"HiveJDBC3.jar"))
conn <- dbConnect(drv, "jdbc:hive2://localhost:10000/default", user="hadoop")

JDBC函數返回沒有抱怨的drv對象,其結構如下所示:

Formal class 'JDBCDriver' [package "RJDBC"] with 2 slots
  ..@ identifier.quote: chr NA
  ..@ jdrv            :Formal class 'jobjRef' [package "rJava"] with 2 slots
  .. .. ..@ jobj  :<externalptr> 
  .. .. ..@ jclass: chr "com/amazon/hive/jdbc3/HS2Driver"

但是,盡可能嘗試dbConnect返回

Error in .jcall(drv@jdrv, "Ljava/sql/Connection;", "connect", as.character(url)[1],  : 
  java.lang.NoClassDefFoundError: Could not initialize class com.amazon.hive.hive.core.Hive2JDBCDriver

我徒勞地嘗試在URL中指定用戶,指定dbname,根本不指定用戶等等。我也嘗試過這里建議的URL的幾種變體,例如“jdbc:hive2:// localhost \\ default” :10000; user = hadoop“,但沒有任何成功。 在這一點上,我似乎非常接近成功,但並沒有完全達到目標。 我犯了什么錯誤? 我該如何糾正?

另一個沒有得到答案的問題包括.jinit()在他們用來成功連接到hive的示例代碼中。 這是丟失的特殊醬汁。 .jinit()啟動JVM,必須在將jar添加到類路徑之前調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM