0627-如何跳过HiveServer2 WebUI的Kerberos验证

禁用HiveServer2 WebUI Kerberos验证

Fayson的github: https://github.com/fayson/cdhproject

推荐关注微信公众号:“Hadoop实操”,ID:gh_c4c535955d0f

1 文档编写目的

在CDH集群启用Kerberos后,通过浏览器访问HiveServer2的Web UI时提示需要输入用户名和密码(即Kerberos账号进行认证)。在前面Fayson介绍了《Windows Kerberos客户端配置并访问CDH》通过该方式可以访问启用Kerberos的Web UI。本篇文章主要介绍在未进行Windown Kerberos客户端配置的情况下如何跳过HiveServer2 Web UI的Kerberos验证。

2 问题描述

在集群启用Kerberos的情况下,在CM界面上想要查看HiveServer2的WenUI,但是却出现了Kerberos验证,本地没有安装Kerberos的客户端。

在这里插入图片描述

在这里插入图片描述

3 问题解决

1.进入CM界面的Hive服务,到配置中修改配置如下:

<property>
    <name>hive.server2.webui.use.spnego</name>
    <value>false</value>
</property>

在这里插入图片描述

2.配置修改完成后保存并重启服务

在这里插入图片描述

3.再次访问HiveServer2的Web UI成功

在这里插入图片描述

4 总结

1.通过浏览器访问Kerberos环境Web UI可以在客户端机器上安装Kerberos客户端,并在浏览器增加受信任的hostsname列表。

2.也可以通过禁用HiveServer2服务的Web认证方式来实现。

你看到的完整错误信息可能是: ``` Kerberos: Server not found in Kerberos database while looking_up_server ``` 这表示客户端在尝试与 Kerberos 服务器(KDC)通信时,**找不到请求的服务主体(Service Principal)**。 --- ## 🧾 错误解释 ### 原始错误: ``` Server not found in Kerberos database while looking_up_server ``` 这是 Kerberos 客户端库(如 `libkrb5`)抛出的一个内部错误,通常发生在以下情况: - 客户端试图通过 Kerberos 访问某个服务(如 HDFS、HiveServer2、HTTP 等)。 - 它会向 KDC 请求 TGS(Ticket Granting Service)票据。 - KDC 在其数据库中 **找不到请求的服务主体(principal)**。 - 因此返回该错误,并拒绝颁发票据。 --- ## 🔍 常见触发场景 | 场景 | 示例 | |------|------| | Hive JDBC 连接 | 使用 Beeline 或 Java JDBC 访问 HiveServer2 | | Spark 提交任务 | 使用 `--keytab` 和 `--principal` 提交任务 | | HDFS 操作 | 使用 `hadoop fs -ls /` | | WebHDFS/Hue 访问 | 浏览器访问 HDFS UI 或 Hue | | Kafka SASL/Kerberos | Kafka 生产/消费数据时 | --- ## ✅ 解决方法详解 ### ✅ 1. 确认服务主体是否存在 使用 `kadmin` 登录到 KDC 并列出所有 principal: ```bash kadmin -p admin/admin list ``` 检查输出是否包含你要访问的服务对应的 principal,例如: ``` hdfs/mycluster@EXAMPLE.COM hive/hiveserver2.example.com@EXAMPLE.COM HTTP/webui.example.com@EXAMPLE.COM ``` 如果没有,请创建它。 --- ### ✅ 2. 创建服务主体(Principal) 在 KDC 上执行: ```bash kadmin -p admin/admin add_principal -randkey hive/hiveserver2.example.com@EXAMPLE.COM ``` > `-randkey` 表示为这个 principal 设置一个随机密钥,不会提示输入密码。 --- ### ✅ 3. 生成 keytab 文件 将 principal 导出为 keytab 文件,供服务端或客户端使用: ```bash ktadd -k hive.service.keytab hive/hiveserver2.example.com@EXAMPLE.COM ``` 你可以将 `hive.service.keytab` 分发给需要认证的服务节点。 --- ### ✅ 4. 验证 keytab 是否可用 使用 `kinit` 测试 keytab 是否能正常获取 ticket: ```bash kinit -kt hive.service.keytab hive/hiveserver2.example.com@EXAMPLE.COM ``` 成功后使用: ```bash klist ``` 查看当前缓存的 ticket。 --- ### ✅ 5. 检查客户端配置中的 principal 名称 确保你在客户端代码或连接字符串中使用的 principal 是正确的。 #### Hive JDBC 示例: ```java String jdbcUrl = "jdbc:hive2://hiveserver2.example.com:10000/default;principal=hive/hiveserver2.example.com@EXAMPLE.COM"; Connection conn = DriverManager.getConnection(jdbcUrl); ``` #### Spark 提交命令: ```bash spark-submit \ --principal hive/hiveserver2.example.com@EXAMPLE.COM \ --keytab hive.service.keytab \ ... ``` --- ### ✅ 6. 检查 DNS 或 `/etc/hosts` 配置 Kerberos 会基于主机名来验证 principal。如果客户端无法解析服务端的主机名,也会导致这个错误。 ```bash ping hiveserver2.example.com nslookup hiveserver2.example.com ``` 必要时可在 `/etc/hosts` 中添加: ``` 192.168.1.10 hiveserver2.example.com ``` --- ## ✅ 示例:HiveServer2 启动配置 在 `hive-site.xml` 中设置 Kerberos 相关参数: ```xml <property> <name>hive.server2.authentication</name> <value>KERBEROS</value> </property> <property> <name>hive.server2.kerberos.principal</name> <value>hive/hiveserver2.example.com@EXAMPLE.COM</value> </property> <property> <name>hive.server2.kerberos.keytab</name> <value>/path/to/hive.service.keytab</value> </property> ``` --- ## ✅ 总结流程图 ``` Client 请求访问 Kerberos 服务 ↓ KDC 查找对应 principal ↓ 存在? → 发放 Ticket ↓ 不存在?→ 报错:"Server not found in Kerberos database" ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值