DBeaver 连接带kerberos 认证的Hive

适用模块

客户端

具体说明

客户端工具对接集群

使用示例

本文基于mac os 系统测试编写,windows 配置仅可作为参数参考, Apple m1 机器也可参考本文

version info

mac os monterey 12.6
dbeaver 22.2.2
hive 2.1.1
hadoop 2.9.2

前置条件

  1. mac 系统本身集成有kerberos , 不需要额外进行安装
  2. 本机办公网络需要和连接环境集群网络连通,包含kdc 和hive server2 服务.( 在本机无法telnet 通kdc 及hiveserver 2对应端口,则无法连通)
  3. 拷贝将要连接kdc 集群的任意一台机器/etc/krb5.conf 配置文件到mac /etc/ 下,注意文件用户权限,需要dbeaver 启动用户有读权限
  4. 拷贝有权限认证hive 的keytab 到mac 任意路径,以及keytab对应的principal
  5. 准备jdbc连接串,dbeaver 支持单机连接,也支持通过zookeeper的高可用连接串

认证

在本机进行kerberos 认证
认证

 kinit -kt keytab  principal

Demo-DBeaver 连接带kerberos 认证的Hive - 图1
查看 Credentials cache,显示如下即为认证成功

klist -A

Demo-DBeaver 连接带kerberos 认证的Hive - 图2

认证清除
kdestroy
Demo-DBeaver 连接带kerberos 认证的Hive - 图3
需要注意的是,认证清除后,连接会出现问题。mac 在机器上认证一次后,会存储到身份认证缓存管理,本机其他服务皆可读取。重新认证后,需要重启dbeaver

DBeaver 启动配置调整

由于最新版本的dbeaver 使用jdk17 存在类加载问题,kerberos 相关配置无法通过连接配置增加,需要在dbeaver 启动配置中添加全局的jvm 参数
在应用程序中找dbeaver ,点击显示包路径 -> Eclipse -> dbeaver.ini
通过文件编辑器打开dbeaver.ini 文件,在 --add-modules=ALL-SYSTEM 参数后添加如下参数

--add-exports=java.security.jgss/sun.security.krb5=ALL-UNNAMED  ;jdk版本差异引起的方案,该配置为临时解决方案
-Dosgi.requiredJavaVersion=11  ;默认有的参数不需要添加
-Djavax.security.auth.useSubjectCredsOnly=false  ;解决krb5环境加载问题
-Djava.security.krb5.conf=/etc/krb5.conf
-Dsun.security.krb5.debug=true

需要注意的是,参数添加时如果添加在文件最后结尾,可能出现配置读取异常问题

完整配置文件参考Demo-DBeaver 连接带kerberos 认证的Hive - 图4

连接

重启dbeaver, 如果它在配置修改期间是启动的。
添加hive 连接,注意驱动设置可不用调整,使用其默认下载的驱动包即可进行连接,自行添加的驱动包,需要解决依赖问题
jdbc 连接串样例

-- zookeeper 连接串 jdbc:hive2://bigdata1:2182,bigdata2:2182,bigdata3:2182/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2;principal=hive/_HOST@BDMS.COM
-- hiveserver2 连接串 jdbc:hive2://bigdata1:9999//default;principal=hive/_HOST@BDMS.COM

Demo-DBeaver 连接带kerberos 认证的Hive - 图5
驱动配置参考
Demo-DBeaver 连接带kerberos 认证的Hive - 图6

作者 清风徐来