当前位置: 首页 > 知识库问答 >
问题:

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

葛海阳
2023-03-14

我正在使用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;”,“连接”,如图所示。字符(url)[1],:java。lang.NoClassDefFoundError:无法初始化类组织。阿帕奇。hadoop。蜂箱conf.HiveConf$ConfVars

甚至我也尝试过使用不同版本的Hive jar,Hive jdbc standalone。但似乎什么都不管用。。我也使用RHive连接到Hive,但也没有成功。

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

共有2个答案

暴德运
2023-03-14

Ioicmathieu的答案现在适用于我,因为我已经切换到一个旧的蜂巢罐,例如从3.1.1到2.0.0。

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

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

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

梁宪
2023-03-14

我没有尝试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通用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
 类似资料:
  • 我在这里做错了什么?查了很多论坛,都得不到妥善的解决方案。任何答复都将不胜感激。 谢谢

  • 我正在尝试访问一个没有在我的计算机上下载配置单元的配置单元群集。我在这里读到,我只需要一个jdbc客户机就可以这样做。我有配置单元群集的url、用户名和密码。我尝试用这些创建hive-site.xml,并以编程方式进行,尽管这种方法似乎没有输入用户名和密码的地方。无论我做什么,似乎下面的错误使我无法访问配置单元:无法实例化org.apache.hadoop.hive.ql.metadata.ses

  • 似乎到远程客户端的netty-connector不高兴!目前,我已经在本地机器上使用标准的616161端口激活了我的运行。我在https://docs.jboss.org/author/display/wfly/connect+a+pooled-connection-factory+to+a+remote+Artemis+server中遵循了说明

  • 问题内容: 我正在尝试使用以下代码从本地计算机virtualhost连接到远程MySQL服务器: 我的问题是我无法本地连接,收到错误消息: 无法连接到“ xxx.xxx.xxx.xxx”上的MySQL服务器(10060) 当我将相同的PHP文件上传到服务器时,情况并非如此。我能够毫无问题地查询数据库。 我也无法通过命令行进行连接,但是我可以访问cPanel,它排除了我的IP被意外禁止的可能性。 我

  • 问题内容: 我想对redis.conf进行一些更改,以便每当我键入redis-cli时,它就会将我连接到安装在远程服务器上的redis。 我知道我们可以通过以下方式连接到安装在远程服务器上的redis: 但是实际上,我有一些bash脚本,在那些脚本中,我在很多地方都使用过redis-cli。因此,我不想以每个文件中的redis-cli -h’IP- Address-Of-Server’替换redi

  • 问题内容: 我已经使用Ubuntu 10.10服务器上http://redis.io/topics/quickstart上的快速入门指南中的说明成功安装了Redis 。我将服务作为dameon运行(因此可以通过init.d运行) 该服务器是具有内部和外部IP的Rackspace Cluster的一部分。主机在端口6379上运行(Redis的标准配置) 我在iptables中添加了一行,以允许来自端