通过 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 连接时出错的主要内容,如果未能解决你的问题,请参考以下文章