使用rjdbc/rhive从r连接到远程hive服务器

xxb16uws  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(462)

我正在使用rjdbc0.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,但也没有成功。
有人能帮我吗?。。我有点卡住了:(

3ks5zfa0

3ks5zfa01#

ioicmathieu的答案现在对我有效,因为我已经切换到一个旧的Hive罐,例如从3.1.1到2.0.0。
不幸的是,我不能评论他的答案,这就是为什么我写了另一个。
如果遇到以下错误,请尝试旧版本:
.jcall出错(drv@jdrv,“ljava/sql/connection;”,“connect“,as.character(url)[1],:java.sql.sqlexception:无法使用jdbc uri打开客户端传输:jdbc:hive2://主机名:无法建立到的连接jdbc:hive2://主机_name:10000:必填字段“客户端协议”未设置!struct:topensessionreq(客户)_protocol:null,配置:{set:hiveconf:hive.server2.thrift.resultset.default.fetch.size=1000,use:database=default})

jc3wubiy

jc3wubiy2#

我没有尝试rhive,因为它似乎需要在集群的所有节点上进行复杂的安装。
我成功地使用rjdbc连接到hive,下面是一个在我的hadoop 2.6 cdh5.4集群上工作的代码snipet:


# 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

更难的是找到所有需要的jar和在哪里找到它们。。。
更新hivestandalonejar包含使用hive所需的所有内容,将这个独立jar与hadoop公共jar一起使用就足够使用hive了。
所以这是一个简化的版本,不需要担心其他jar的hadoop通用和hive独立jar。


# 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

相关问题