R和Hive连接-RJDBC + RHive

时间:2014-06-13 23:49:40

标签: java r hadoop jdbc hive

我在相同的主机名上有R和Hive,我正在尝试连接这两个,所以我可以直接从R访问Hive表。虽然我已经能够这样做(使用RHive),但我无法连接与RJDBC。我在这里有两个问题,现在解决这两个问题中的任何一个,都可以和我一起工作。

Issue1 ## 使用RHIVE在R和hive之间建立连接。我运行了一个简单的查询,

rhive.query("CREATE TABLE test AS SELECT * FROM table_name WHERE column1='ABC'")

这在所需的数据库中创建了所需的表,并且运行时间不多

test123<-rhive.query("SELECT * FROM table_name WHERE column1='ABC'")

如果我尝试将结果保存在临时对象test123中,则此查询会异常 长。

我如何解决这个问题,为什么会有这么大的差异?例如,test123 需要30分钟但仍未完成,而表“temp”需要&lt; 1分钟

问题2 ## 我无法使用下面建立R和hive连接。

require(RJDBC)
cp <- c(list.files("/location/lib/hadoop/lib", pattern = "[.]jar", full.names=TRUE, recursive=TRUE),
        list.files("/location/lib/hive/lib", pattern = "[.]jar", full.names=TRUE, recursive=TRUE), recursive=TRUE))
drv <- JDBC(driverClass = "org.apache.hadoop.hive.jdbc.HiveDriver", classPath = cp)

hiveconnection <- dbConnect(drv,"jdbc:hive://hostname.com:10000/default", "username", "password")

注意:jar文件是相同的,RHive或RJDBC,但是,我收到以下警告,Putty挂起帖子。使用RHive时,我收到相同的警告,但它会进一步建立连接。

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/cloudera/parcels/CDH-4.6.0-1.cdh4.6.0.p0.26/lib/hadoop/lib/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/cloudera/parcels/CDH-4.6.0-1.cdh4.6.0.p0.26/lib/hive/lib/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.

欢迎提出任何建议,非常感谢!

1 个答案:

答案 0 :(得分:0)

我用这个解决了第二个问题 -

改变1:

添加hadoop-core .jar文件,它们不见了

改变2:
drv&lt; - JDBC(driverClass =&#34; org.apache.hadoop.hive.jdbc.HiveDriver&#34;,classPath = cp)

更改3:将连接URL更新为&#34; jdbc:hive2:// hostname:port / default&#34;