暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

通过DBeaver本地访问远程Kerberos环境下的Hive

伦少的博客 2022-05-14
1734

前言

本文讲解如何通过数据库客户端界面工具DBeaver连接远程Kerberos环境下的Hive。

因为在远程服务器上的命令行里写SQL查询Hive表,如果数据量和表字段比较多,命令行界面不利于分析表数据,所以需要客户端工具如DBeave远程连接Hive查询数据,但是DBeaver默认的不能访问Kerberos下的Hive,需要一些配置才可以访问,这里记录一下。

1、DBeaver连接Hive

关于DBeaver如何连接正常的不带Kerberos认证的Hive,请参考通过数据库客户端界面工具DBeaver连接Hive,本文只讲解如何在Windows上用DBeaver对kerberos认证

2、安装Kerberos客户端

官网下载https://web.mit.edu/kerberos/dist/index.html,我下载的是这个:https://web.mit.edu/kerberos/dist/index.html#kfw-4.1

下载下来后,一键安装

3、krb5.ini

我的kerberos客户端安装目录为D:\program\company\kerberos,将集群上的/etc/krb5.conf,复制到此目录下,改名为krb5.ini,内容如下:

[libdefaults]
  renew_lifetime = 7d
  forwardable = true
  default_realm = INDATA.COM
  ticket_lifetime = 24h
  dns_lookup_realm = false
  dns_lookup_kdc = false
  default_ccache_name = /tmp/krb5cc_%{uid}
  #default_tgs_enctypes = aes des3-cbc-sha1 rc4 des-cbc-md5
  #default_tkt_enctypes = aes des3-cbc-sha1 rc4 des-cbc-md5

[domain_realm]
  indata.com = INDATA.COM

[logging]
  default = FILE:/var/log/krb5kdc.log
  admin_server = FILE:/var/log/kadmind.log
  kdc = FILE:/var/log/krb5kdc.log

[realms]
  INDATA.COM = {
    admin_server = indata-192.168.44.128.indata.com:17490
    kdc = indata-192.168.44.128.indata.com
    kdc = indata-192.168.44.129.indata.com
  }

4、配置kerberos环境变量

KRB5_CONFIG:D:\program\company\kerberos\krb5.ini
KRB5CCNAME:D:\tmp\krb5cache

重启生效

5、验证keberos命令

将集群服务器上的keytab文件下载到本地,这里为D:\conf\inspur\hive.service.keytab,然后用下面的命令验证

kinit -kt D:\conf\inspur\hive.service.keytab hive/indata-192.168.44.128.indata.com@INDATA.COM

我的报了下面的异常

Exception: too many parameters
java.lang.IllegalArgumentException: too many parameters
        at sun.security.krb5.internal.tools.KinitOptions.<init>(KinitOptions.java:153)
        at sun.security.krb5.internal.tools.Kinit.<init>(Kinit.java:147)
        at sun.security.krb5.internal.tools.Kinit.main(Kinit.java:113)

一开始很奇怪,因为kinit命令就是这么用的,为啥会报参数过多呢,网上查资料发现,原来是jdk也自带了一个kinit命令,这里用的是jdk自带的kinit命令,需要再配置一下环境变量,在path里添加D:\program\company\kerberos\bin,需要注意的是要加在java的环境变量(%JAVA_HOME%\jre\bin)的前面。然后重试上面的命令,发现不报错了,用klist验证

klist
Ticket cacheFILE:D:\tmp\krb5cache
Default principal: hive/indata-192.168.44.128.indata.com@INDATA.COM

Valid starting     Expires            Service principal
06/03/21 15:43:03  06/04/21 15:43:02  krbtgt/INDATA.COM@INDATA.COM
        renew until 06/10/21 15:43:02

也可以在kerberos界面上查看,如下图:

注意:后面的用DBeaver连接Hive时,首先用kinit 命令进行缓存票据

6、配置DBeaver

在配置文件D:\program\company\dbeaver\dbeaver.ini最后添加

-Djavax.security.auth.useSubjectCredsOnly=false
-Djava.security.krb5.conf=D:\program\company\kerberos\krb5.ini
-Dsun.security.krb5.debug=true

注意-Djava.security.krb5.conf对应的值不要加引号"",网上很多教程都是加"",这样会导致DBeaver识别不到krb5.ini的配置文件,从而导致对kerberos的认证失败。这里坑了我很长时间,一直搞不清为啥认证失败。。。

7、连接Spark Thrift Server

首先启动Spark Thrift Server,关于怎么启动,参考Java 连接 Spark Thrift Server/Hive Server总结

然后在Dbeaver里:新建->数据库连接->选择Hadoop-Spark Hive->输入主机IP、端口、数据库->然后编辑驱动设置,删除原来的驱动,添加这个项目的jar包https://github.com/dongkelun/java-spark-thrift-server-demo

其中这里的数据库为default;principal=HTTP/indata-192.168.44.128.indata.com@INDATA.COM?hive.server2.transport.mode=http;hive.server2.thrift.http.path=cliservice

然后测试连接


如果不成功,检查一下上述的配置

8、连接Hive Server

测试连接前先启动hive相关的服务,然后在Dbeaver里:新建->数据库连接->选择Hadoop-Spark Hive->输入主机IP、端口、数据库->然后编辑驱动设置,删除原来的驱动,添加这个项目的jar包https://github.com/dongkelun/java-spark-thrift-server-demo

其中这里的数据库为default;principal=hive/indata-192.168.44.128.indata.com@INDATA.COM

然后测试连接

参考

  • https://zhuanlan.zhihu.com/p/63154589

  • https://www.aboutyun.com/thread-26425-1-1.html

  • https://blog.csdn.net/Mr_kidBK/article/details/104580112

相关阅读


文章转载自伦少的博客,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论