【发布时间】:2016-04-16 13:52:23
【问题描述】:
Amazon provides a JDBC Driver 用于连接到 Hive。有一个JDBC package for R 似乎应该能够利用这些驱动程序并允许访问 Hive。事实上,其他人显然已经能够访问Hive from R with JDBC。
我没有这么幸运。我已经通过 SQL Workbench/J 成功使用了亚马逊驱动程序,遵循instructions provided by Amazon 从 Hive 提取一些数据。因此,我知道实际上 Amazon JDBC 驱动程序中包含的 .jar 足以连接到我的 EMR 集群上的 Hive (0.13.1) 版本,并且我也知道 SSH 隧道已正确设置。
似乎以下 R 代码应该足以连接到 EMR 集群上的 Hive(遵循与 SQL Workbench/J 类似的配置选项,并抄录“从 R 中使用 Hive 和 JDBC”博客文章中的一些注释):
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 的变体,如建议的here,例如“jdbc:hive2://localhost\default:10000;user=hadoop”,但没有任何成功。在这一点上,我似乎非常接近成功,但还没有达到目标。我犯了什么错误?我该如何纠正?
【问题讨论】:
标签: r jdbc hive amazon-emr