我一直在尝试使用rjdbc包将r(在本地计算机上)与hive(服务器)连接,但发现了以下错误:
.jcall出错(drv@jdrv,“ljava/sql/connection;”,“connect”,as.character(url)[1],:java.sql.sqlexception:org.apache.thrift.tapplicationexception:方法名无效:“execute”
我直接将服务器上运行的jar复制到本地机器上,这样驱动程序版本就不会有问题了。我也尝试过使用rjdbc包的早期版本,但也不起作用。
如有任何意见/建议,我将不胜感激。
我的剧本:
配置单元连接<-函数(主机名、端口、库目录、配置单元jar){library(rjdbc)library(dbi)library(rjava)library(rserve)
lib\u dir:包含jar和驱动程序的目录hive\u class\u path<-file.path(lib\u dir,hive\u jars)
drv<-jdbc('org.apache.hadoop.hive.jdbc.hivedriver',classpath=hive\u class\u path,“`”)服务器<-sprintf('jdbc:hive://%s:%s',主机名,端口)
return(dbconnect(drv,服务器,'hive','hive'))}
conn<-hive\u connection('hostname',9083,'lib\u dir',list.files('lib\u dir'))
3条答案
按热度按时间xmq68pz91#
我通过以下两个步骤解决了同样的问题-
变化1:
变化在驱动程序中,注意我拿出来了。hadoop
变化2:
我在连接的url中添加了“2”,以连接到hiveserver2。
我通过阅读这个得到了详细的解释-http://jayunit100.blogspot.com/2013/12/the-anatomy-of-jdbc-connection-in-hive.html
aemubtdh2#
这与驱动程序和端口有关,我在用jdbc驱动程序连接hive时遇到了相同的错误。最后,我找到了正确的驱动程序和配置单元服务与端口。效果不错。
neekobn83#
尝试
drv <- JDBC( 'org.apache.hadoop.hive.jdbc.HiveDriver',c(hive_class_path ,pattern="jar$" ,full.names=T) )