通过 Knox 获取到 Hive 的 JDBC 连接时出错

Posted

技术标签:

【中文标题】通过 Knox 获取到 Hive 的 JDBC 连接时出错【英文标题】:Error getting a JDBC connection to Hive via Knox 【发布时间】:2018-05-22 08:13:00 【问题描述】:

我有一个运行 Hortonworks Data Platform 2.4.2 的 Hadoop 集群,它已经运行了一年多。集群是 Kerberized,外部应用程序通过 Knox 连接。今天早些时候,集群停止接受通过 Knox 到 Hive 的 JDBC 连接。

Knox 日志显示没有错误,但 Hive Server2 日志显示以下错误:

“引起:org.apache.hadoop.security.authorize.AuthorizationException:用户:knox不允许冒充org.apache.hive.service.cli.HiveSQLException:无法验证knox的代理权限”

查看其他用户的建议似乎主要围绕 hadoop.proxyusers.users 和 hadoop.proxyusers.groups 的配置选项的正确设置。

但是,就我而言,我看不出这些设置可能是什么问题。该集群已经运行了一年多,我们每天都有许多应用程序通过 JDBC 连接到 Hive。服务器的配置未更改,并且连接先前在当前配置上成功。没有对平台或环境进行任何更改,并且在上次成功的 JDBC 连接和被拒绝的 JDBC 连接之间没有重新启动或关闭集群以进行维护。

我现在已经停止并启动了集群,但是重启后集群仍然不接受 JDBC 连接。

有人对我应该如何进行有任何建议吗?

【问题讨论】:

您好,您现在可以连接吗?我面临同样的问题,你能分享你的 JDBC url 和 core-site.xml conf 行吗? TIA。 【参考方案1】:

您是否打开了Hive Impersonation?

hive.server2.enable.doAs=true

这可能是假设 hadoop.proxyusers.users 和 hadoop.proxyusers.groups 设置正确的问题。

另外,检查用户 'knox' 是否存在于 Hive Server2 节点(以及其他用于模拟的节点)。

【讨论】:

我们确实打开了 Hive 模拟,并且 Hive 服务器上确实存在 Knox 用户。【参考方案2】:

已知的解决方法似乎是设置:

hadoop.proxyuser.knox.groups = *
hadoop.proxyuser.knox.hosts = *

我还没有找到真正的解决方案,可以让您保持这层额外的安全性。

【讨论】:

以上是关于通过 Knox 获取到 Hive 的 JDBC 连接时出错的主要内容,如果未能解决你的问题,请参考以下文章

无法通过 jdbc 连接到 hive

无法通过 jdbc 连接到 hive 3

无法使用 Zookeeper 连接字符串通过 JDBC 连接到 Hive

无法使用 jdbc 通过 Hive 连接到 HBase

通过远程jdbc方式连接到hive数据仓库

jdbc连hive怎么批量插入