hadoop - 使用 jdbc 从远程 Windows 系统连接到 Kerberized Hive

标签 hadoop jdbc hive kerberos

我已经在 Linux 服务器(Red Hat)上设置了一个启用了 Kerberos 安全性的 Hive 环境。我需要使用 JDBC 从远程 Windows 计算机连接到 Hive。

所以,我在linux机器上运行了hiveserver2,并且我已经完成了“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/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="7e2136312d2a3e27312b2c532c3b3f3233503d3133" rel="noreferrer noopener nofollow">[email protected]</a>>: 
GSS initiate failed

我在这里做错了什么?我查了很多论坛,但没有找到合适的解决方案。任何答案将不胜感激。

谢谢

最佳答案

如果您在 Linux 中运行代码,我只需指向 that post -- 即,您必须使用系统属性从具有特定格式的 conf 文件定义 Kerberos 和 JAAS 配置
而且您必须切换调试跟踪标志以了解微妙的配置问题(即不同类型/版本的 JVM 可能有不同的语法要求,这些要求没有记录在案,这是一个反复试验的过程)。

但是在 Windows 上还存在其他问题:

  1. Apache Hive JDBC 驱动程序对 Hadoop JAR 有一定的依赖性,尤其是在涉及 Kerberos 时(有关详细信息,请参阅 that post)
  2. 这些 Hadoop JAR 需要“ native 库”——即 Hadoop 的 Windows 端口(您必须自己编译!!或者从网络上不安全的源下载!!)——加上系统属性 hadoop.home.dirjava.library.path 分别指向 Hadoop 主目录及其 bin 子目录

最重要的是,Apache Hive 驱动程序存在兼容性问题 - 每当有线协议(protocol)发生变化时,新客户端就无法连接到旧服务器。

因此,我强烈建议您为 Windows 客户端使用Hive 的 Cloudera JDBC 驱动程序。 Cloudera 网站只询问您的电子邮件。
之后,您可以阅读 80 多页的 PDF 手册,将 JAR 添加到 CLASSPATH 中,并根据手册调整 JDBC URL。
旁注:Cloudera 驱动程序是一个正确的 JDBC-4.x 兼容驱动程序,不需要旧的 Class.forName()...

关于hadoop - 使用 jdbc 从远程 Windows 系统连接到 Kerberized Hive,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39362326/

相关文章:

java - Hadoop MapReduce、Java实现问题

hadoop - s3n/s3a如何管理文件?

java.lang.ClassNotFoundException : con. mysql.jdbc.Driver

java - Java MySQL executeUpdate() 为 INSERT ON ON DUPLICATE KEY UPDATE 返回什么?

sql - 当列中的所有值并非都相等时返回数据

hadoop - 在 hadoop Map reduce 中读取带有工作表的 Excel 文件

hadoop - 尝试在虚拟上部署5个节点

java - Tomcat JDCBRealm 找不到驱动程序类

linux - 使用 awk 在列中包含带有格式的文件名

hadoop - 减少 Hive 查询执行时间的方法