我一直在尝试使用RJDBC软件包将R(在本地计算机上)与Hive(服务器)连接,并且看到错误:
.jcall中的错误(drv @ jdrv,“Ljava / sql / Connection;”,“connect”,as.character(url)[1],: java.sql.SQLException:org.apache.thrift.TApplicationException:方法名称无效:'execute'
我直接将服务器上运行的jar复制到我的本地机器上,这不应该是驱动程序版本的问题。我也尝试使用早期版本的RJDBC软件包,但它也没有用。
我真的很感激任何想法/建议。
我的剧本:
#hive_connection< - function(hostname,port,lib_dir,hive_jars){ 库(RJDBC) 库(DBI) 库(rJava) 库(Rserve)
#lib_dir:包含jars&的目录司机 hive_class_path< - file.path(lib_dir,hive_jars)
drv< - JDBC('org.apache.hadoop.hive.jdbc.HiveDriver',classPath = hive_class_path,“`”) server< - sprintf('jdbc:hive://%s:%s',主机名,端口)
return(dbConnect(drv,server,'hive','hive')) }
conn< - hive_connection('hostname',9083,'lib_dir',list.files('lib_dir'))
答案 0 :(得分:0)
这与驱动程序和端口有关,我在使用jdbc驱动程序连接配置单元时遇到同样的错误。最后我找到了正确的驱动程序和端口服务。它运作良好。
答案 1 :(得分:0)
尝试
drv <- JDBC( 'org.apache.hadoop.hive.jdbc.HiveDriver',c(hive_class_path ,pattern="jar$" ,full.names=T) )
答案 2 :(得分:0)
我通过以下两个步骤解决了同样的问题 -
改变1:
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
得到了详细的解释