0

我一直在尝试使用 RJDBC 包将 R(在本地机器上)与 Hive(服务器)连接,并且看到错误:

.jcall(drv@jdrv, "Ljava/sql/Connection;", "connect", as.character(url)[1], 中的错误:java.sql.SQLException: org.apache.thrift.TApplicationException: 方法名无效: '执行'

我直接将服务器上运行的 jar 复制到我的本地机器上,这不应该是驱动程序版本的问题。我也尝试过使用早期版本的 RJDBC 包,但也没有用。

我真的很感激任何想法/建议。

我的脚本:

#

hive_connection <-函数(主机名,端口,lib_dir,hive_jars){库(RJDBC)库(DBI)库(rJava)库(Rserve)

# lib_dir: 包含 jar 和驱动程序的目录 hive_class_path <- file.path( lib_dir, hive_jars )

drv <- JDBC( 'org.apache.hadoop.hive.jdbc.HiveDriver', classPath= hive_class_path, "`" ) 服务器 <- sprintf( 'jdbc:hive://%s:%s', 主机名, 端口)

返回(dbConnect(驱动器,服务器,'hive','hive'))}

conn <- hive_connection('hostname',9083,'lib_dir', list.files('lib_dir'))

4

3 回答 3

0

我通过以下两个步骤解决了同样的问题 -

变化一:

drv <- JDBC( 'org.apache.hive.jdbc.HiveDriver', classPath= hive_class_path, "`" ) 

更改在驱动程序中,注意我取出了 .hadoop

变化2:

server <- sprintf( 'jdbc:hive2://%s:%s', hostname, port )

我在连接的 url 中添加了“2”,以连接到 hiveServer2。

我通过阅读得到了详细的解释 - http://jayunit100.blogspot.com/2013/12/the-anatomy-of-jdbc-connection-in-hive.html

于 2014-06-16T22:33:25.607 回答
0

这与驱动程序和端口有关,我在将 hive 与 jdbc 驱动程序连接时遇到了同样的错误。最后我找到了正确的驱动程序和带有端口的配置单元服务。它工作得很好。

于 2013-11-15T07:14:46.927 回答
0

尝试
drv <- JDBC( 'org.apache.hadoop.hive.jdbc.HiveDriver',c(hive_class_path ,pattern="jar$" ,full.names=T) )

于 2013-11-15T07:27:42.973 回答