从远程windows系统使用jdbc连接到kerberised hive

qxsslcnc  于 2021-05-29  发布在  Hadoop
关注(0)|答案(3)|浏览(474)

我在linux服务器(red hat)上设置了一个配置单元环境,并启用了kerberos安全性。我需要使用jdbc从远程windows机器连接到hive。
所以,我让hiveserver2在linux机器上运行,并完成了“kinit”。
现在我试着用这样的测试程序从windows端的java程序连接,

Class.forName("org.apache.hive.jdbc.HiveDriver");
String url = "jdbc:hive2://<host>:10000/default;principal=hive/_HOST@<YOUR-REALM.COM>"
Connection con = DriverManager.getConnection(url);

我犯了以下错误,

Exception due to: Could not open client transport with JDBC Uri:
 jdbc:hive2://<host>:10000/;principal=hive/_HOST@YOUR-REALM.COM>: 
GSS initiate failed

我做错什么了?我查看了很多论坛,但都找不到合适的解决方案。任何回答都将不胜感激。
谢谢

tjjdgumg

tjjdgumg1#

当我们遇到问题时,关键是:
在您的服务器上,列出了允许对数据进行操作的某些kerberos主体。
当我们试图通过jdbc运行查询时,我们没有在客户端执行正确的kinit。
在这种情况下,解决办法显而易见:

在windows客户机上:在连接之前,请使用适当的帐户进行kinit

roejwanj

roejwanj2#

如果您是在linux中运行代码,我只想指出这篇文章——即,您必须使用系统属性来定义kerberos和jaas配置,这些配置来自具有特定格式的conf文件。
您必须切换调试跟踪标志以了解子文件配置问题(即不同风格/版本的JVM可能有不同的语法要求,这些要求没有文档记录,这是一个试错过程)。
但在windows上还有其他问题:
apachehivejdbc驱动程序对hadoopjar有一些依赖性,特别是当涉及kerberos时(有关详细信息,请参阅那篇文章)
这些hadoop jar需要“本机库”——即hadoop的windows端口(您必须自己编译!)!!或者从不安全的网站下载!!)--plus系统属性 hadoop.home.dir 以及 java.library.path 指向hadoop home dir及其 bin 副总监
除此之外,apache hive驱动程序还存在兼容性问题——每当wire协议发生更改时,新的客户端就无法连接到旧的服务器。
所以我强烈建议您在windows客户机上使用clouderajdbc驱动程序。cloudera站点只是询问您的电子邮件。
之后,您有一本80多页的pdf手册要阅读,jar要添加到类路径,jdbc url要根据手册进行调整。
旁注:cloudera驱动程序是一个与jdbc-4.x兼容的驱动程序,不需要那种遗留的驱动程序 Class.forName() ...

at0kjp5o

at0kjp5o3#

String url = "jdbc:hive2://<host>:10000/default;principal=hive/_HOST@<YOUR-REALM.COM>"

你应该替换 <YOUR-REALM.COM> 用你的真实 Realm 。

相关问题