使用RJDBC/RHive从R连接到远程配置单元服务器

使用RJDBC/RHive从R连接到远程配置单元服务器,r,hadoop,hive,rjdbc,R,Hadoop,Hive,Rjdbc,我正在使用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

我正在使用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")
库(DBI)
图书馆(rJava)
图书馆(RJDBC)
.jinit(参数=“-DrJava.debug=true”)

drv我没有尝试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
#加载库
图书馆(“DBI”)
图书馆(“rJava”)
图书馆(“RJDBC”)
#类路径的init(在CDH5.4安装中与Hadoop2.6配合使用)
cp=c(“/usr/lib/hive/lib/hive jdbc.jar”、“/usr/lib/hadoop/client/hadoop common.jar”、“/usr/lib/hive/libthrift-0.9.2.jar”、“/usr/lib/hive/lib/hive/lib/hive/lib/httpclient-4.2.5.jar”、“/usr/lib/hive/hive/hive/hive-4.2.5.jar”、“/usr/lib/hive/hive/hive/jdbc
.jinit(类路径=cp)
#连接初始化

drv我没有尝试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
#加载库
图书馆(“DBI”)
图书馆(“rJava”)
图书馆(“RJDBC”)
#类路径的init(在CDH5.4安装中与Hadoop2.6配合使用)
cp=c(“/usr/lib/hive/lib/hive jdbc.jar”、“/usr/lib/hadoop/client/hadoop common.jar”、“/usr/lib/hive/libthrift-0.9.2.jar”、“/usr/lib/hive/lib/hive/lib/hive/lib/httpclient-4.2.5.jar”、“/usr/lib/hive/hive/hive/hive-4.2.5.jar”、“/usr/lib/hive/hive/hive/jdbc
.jinit(类路径=cp)
#连接初始化

drvIoicmathieu的答案现在适用于我,因为我已经从3.1.1切换到了2.0.0

不幸的是,我不能评论他的答案,这就是为什么我写了另一个

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

jcall中的错误(drv@jdrv,“Ljava/sql/Connection;”,,“connect”, as.character(url)[1],:java.sql.SQLException:无法打开 具有JDBC Uri的客户端传输: jdbc:hive2://host\u name:无法建立 连接到jdbc:hive2://host\u name:10000:必需 “客户端协议”字段未设置! 结构:TOpenSessionReq(客户端协议:null, 配置:{set:hiveconf:hive.server2.thrift.resultset.default.fetch.size=1000, 用法:database=default})


Ioicmathieu的答案现在适用于我,因为我已经从3.1.1切换到了2.0.0

不幸的是,我不能评论他的答案,这就是为什么我写了另一个

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

jcall中的错误(drv@jdrv,“Ljava/sql/Connection;”,,“connect”, as.character(url)[1],:java.sql.SQLException:无法打开 具有JDBC Uri的客户端传输: jdbc:hive2://host\u name:无法建立 连接到jdbc:hive2://host\u name:10000:必需 “客户端协议”字段未设置! 结构:TOpenSessionReq(客户端协议:null, 配置:{set:hiveconf:hive.server2.thrift.resultset.default.fetch.size=1000, 用法:database=default})


感谢loicmathieu的回复。我已经从我的服务器上安装的Hive和hadoop的lib目录中获取了所有JAR。这里还有两个不同之处,一个是我正在尝试连接到远程服务器而不是本地服务器。第二个是我的服务器上没有配置Hive2&我必须在Conn参数中使用Hive(“jdbc:hive://myserver:10000/....)您可以进一步建议吗?您好,我也通过Hive2服务器连接到远程配置单元(我使用localhost作为示例)。您可以尝试与我相同的方法,但使用org.apache.hadoop.Hive.jdbc.HiveDriver驱动程序和您使用的jdbc URl。这里的主要部分是定义正确的类路径并使用它调用.jinit(在您的示例中,您没有使用与我相同的初始化代码)。因此,我建议您使用与我的示例中相同的初始化rJava的方法(先定义cp,然后调用n.jinit()),我只是一个接一个地添加了所有需要的jar util,我没有更多的NoClassDefFoundError…我也遵循了您提到的相同操作,但再次遇到了相同的错误。但是,当我检查Hive-common-0.14.jar时,HiveConf类文件与相应的包一起出现。我不确定JVM为什么不考虑这个问题。甚至我检查了我的JVM版本使用创建此jar文件的JVM版本。我的版本比jar的JVM更新,因此不应该有任何问题:(这些语句的顺序对我很重要。
library(“DBI”)library(“rJava”)library(“RJDBC”)drv还有,下面是我使用的jar列表
hadoop common.jar hive service.jar libthrift-0.9.3.jar slf4j-log4j12.jar hive jdbc standalone.jar httpclient-4.2.5.jar log4j-1.2.17.jar hive jdbc.jar httpcore-4.2.5.jar slf4j api.jar
感谢loicmathieu的回复。我已经从hive&hado的lib目录中获取了所有jar安装在我的服务器上的op。这里还有两个不同之处,一个是我试图连接到远程服务器而不是本地服务器。第二个是我的服务器上没有配置Hive2&我必须在Conn参数中使用hive(“jdbc:hive://myserver:10000/....)您能进一步建议吗?嗨,我还连接到远程配置单元(我使用localhost作为示例)但是通过Hive2服务器。您可以尝试与我相同的方法,但使用org.apache.hadoop.hive.jdbc.HiveDriver驱动程序和您使用的jdbc URl。这里的主要部分是定义正确的类路径并使用它调用.jinit(在您的示例中,您没有使用与我相同的初始化代码).因此,我建议您使用与我的示例中相同的方法初始化rJava(先定义cp,然后调用n.jinit()),我只是一个接一个地添加了所有需要的jar util,我没有更多的NoClassDefFoundError…我也遵循了您提到的相同操作,但再次遇到了相同的错误。但是,当我检查Hive-common-0.14.jar时,HiveConf类文件中有相应的