1

我正在使用 RJDBC 0.2-5 连接到 Rstudio 中的 Hive。我的服务器有 hadoop-2.4.1 和 hive-0.14。我按照下面提到的步骤连接到 Hive。

library(DBI)
library(rJava)
library(RJDBC)
.jinit(parameters="-DrJava.debug=true")
drv <- JDBC("org.apache.hadoop.hive.jdbc.HiveDriver", 
            c("/home/packages/hive/New folder3/commons-logging-1.1.3.jar",
              "/home/packages/hive/New folder3/hive-jdbc-0.14.0.jar",
              "/home/packages/hive/New folder3/hive-metastore-0.14.0.jar",
              "/home/packages/hive/New folder3/hive-service-0.14.0.jar",
              "/home/packages/hive/New folder3/libfb303-0.9.0.jar",
              "/home/packages/hive/New folder3/libthrift-0.9.0.jar",
              "/home/packages/hive/New folder3/log4j-1.2.16.jar",
              "/home/packages/hive/New folder3/slf4j-api-1.7.5.jar",
              "/home/packages/hive/New folder3/slf4j-log4j12-1.7.5.jar",
              "/home/packages/hive/New folder3/hive-common-0.14.0.jar",
            "/home/packages/hive/New folder3/hadoop-core-0.20.2.jar",
            "/home/packages/hive/New folder3/hive-serde-0.14.0.jar",
             "/home/packages/hive/New folder3/hadoop-common-2.4.1.jar"),
            identifier.quote="`")

conHive <- dbConnect(drv, "jdbc:hive://myserver:10000/default",
                  "usr",
                  "pwd")

但我总是收到以下错误:

.jcall 中的错误(drv@jdrv,“Ljava/sql/Connection;”,“connect”,as.character(url)[1],:java.lang.NoClassDefFoundError:无法初始化类 org.apache.hadoop.hive .conf.HiveConf$ConfVars

即使我尝试使用不同版本的 Hive jar,Hive-jdbc-standalone.jar 但似乎没有任何效果。我也使用 RHive 连接到 Hive,但也没有成功。

任何人都可以帮助我吗?..我有点卡住了:(

4

2 回答 2

7

我没有尝试 rHive,因为它似乎需要在集群的所有节点上进行复杂的安装。

我使用 RJDBC 成功连接到 Hive,这是一个适用于我的 Hadoop 2.6 CDH5.4 集群的代码片段:

#loading libraries
library("DBI")
library("rJava")
library("RJDBC")

#init of the classpath (works with hadoop 2.6 on CDH 5.4 installation)
cp = c("/usr/lib/hive/lib/hive-jdbc.jar", "/usr/lib/hadoop/client/hadoop-common.jar", "/usr/lib/hive/lib/libthrift-0.9.2.jar", "/usr/lib/hive/lib/hive-service.jar", "/usr/lib/hive/lib/httpclient-4.2.5.jar", "/usr/lib/hive/lib/httpcore-4.2.5.jar", "/usr/lib/hive/lib/hive-jdbc-standalone.jar")
.jinit(classpath=cp)

#initialisation de la connexion
drv <- JDBC("org.apache.hive.jdbc.HiveDriver", "/usr/lib/hive/lib/hive-jdbc.jar", identifier.quote="`")
conn <- dbConnect(drv, "jdbc:hive2://localhost:10000/mydb", "myuser", "")

#working with the connexion
show_databases <- dbGetQuery(conn, "show databases")
show_databases

更难的是找到所有需要的罐子以及在哪里找到它们......

更新 hive 独立 JAR 包含使用 Hive 所需的所有内容,将此独立 JAR 与 hadoop-common jar 一起使用就足以使用 Hive。

所以这是一个简化的版本,不用担心 hadoop-common 和 hive-standalone jars 的其他 jars。

 #loading libraries
 library("DBI")
 library("rJava")
 library("RJDBC")

 #init of the classpath (works with hadoop 2.6 on CDH 5.4 installation)
 cp = c("/usr/lib/hadoop/client/hadoop-common.jar", "/usr/lib/hive/lib/hive-jdbc-standalone.jar")
 .jinit(classpath=cp)

 #initialisation de la connexion
 drv <- JDBC("org.apache.hive.jdbc.HiveDriver", "/usr/lib/hive/lib/hive-jdbc-standalone.jar", identifier.quote="`")
 conn <- dbConnect(drv, "jdbc:hive2://localhost:10000/mydb", "myuser", "")

 #working with the connexion
 show_databases <- dbGetQuery(conn, "show databases")
 show_databases
于 2015-10-08T15:45:19.120 回答
0

在我切换到较旧的蜂巢罐后,例如从 3.1.1 到 2.0.0,Ioicmathieu 的答案现在对我有用。

不幸的是,我无法评论他的答案,这就是我写另一个答案的原因。

如果遇到以下错误,请尝试使用旧版本:

.jcall 中的错误(drv@jdrv、“Ljava/sql/Connection;”、“connect”、as.character(url)[1]、:java.sql.SQLException:无法使用 JDBC Uri 打开客户端传输:jdbc: hive2://host_name: 无法建立与 jdbc:hive2://host_name:10000 的连接:必填字段“client_protocol”未设置!结构:TOpenSessionReq(client_protocol:null, configuration:{set:hiveconf:hive.server2.thrift.结果集.default.fetch.size=1000,使用:数据库=默认})

于 2019-07-02T11:41:46.927 回答