我在相同的主机名上有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.
欢迎提出任何建议,非常感谢!
答案 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;