首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用RJDBC/RHive从R连接到远程Hive服务器

使用RJDBC/RHive从R连接到远程Hive服务器
EN

Stack Overflow用户
提问于 2015-10-08 05:32:51
回答 2查看 9K关注 0票数 1

我使用RJDBC0.2-5连接到Rstudio中的Hive。我的服务器有hadoop-2.4.1和hive0.14。我按照下面提到的步骤连接到蜂巢。

代码语言:javascript
复制
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,但也没有成功。

有人能帮我吗..我有点卡住了:

EN

回答 2

Stack Overflow用户

发布于 2015-10-08 15:45:19

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

我使用RJDBC成功地连接到Hive,下面是在我的Hadoop2.6CDH5.4集群上工作的代码片段:

代码语言:javascript
复制
#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

更难的是找到所有需要的罐子和找到它们的地方..。

UPDATE Hive独立JAR包含使用Hive所需的所有内容,使用此独立JAR与hadoop-公共jar就足以使用hive了。

所以这是一个简化的版本,不需要担心其他的jars,也就是hadoop通用的和蜂房独立的罐子。

代码语言:javascript
复制
 #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
票数 7
EN

Stack Overflow用户

发布于 2019-07-02 11:41:46

Ioicmathieu的回答现在对我有用,因为我已经切换到了一个更老的蜂箱罐,比如从3.1.1到2.0.0。

不幸的是,我不能对他的回答发表评论,这就是我写另一篇文章的原因。

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

.jcall中的错误(drv@jdrv,"Ljava/sql/ connection ;",“as.character”,as.character(url)1,:java.sql.SQLException:无法使用JDBC Uri: jdbc:hive2 2://host_name:未能建立到jdbc:hive2://host_name:10000:必需字段'client_protocol‘是未设置的连接!结构:TOpenSessionReq(client_protocol:null,configuration:{set:hiveconf:hive.server2.thrift.resultset.default.fetch.size=1000,use:database=default})

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33007353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档