工具

MIT Kerberos : https://web.mit.edu/kerberos/kfw-4.1/kfw-4.1.html DBVisualizer :https://www.dbvis.com/download/10.0 根据自己需要选择是否需要带jdk的

安装软件

软件安装默认下一步,没有什么需要注意的

本地环境变量配置

  • krb5.ini : 可以从集群中拷贝一个,放到c:\windows下面,也在mit里面放一个,目录是:C:\ProgramData\MIT\Kerberos5
  • 环境变量
KRB5_CONFIG = C:\ProgramData\MIT\Kerberos5\krb5.ini
KRB5CCNAME= C:\temp\krb5cache

如下图

dbeaver中hive没有驱动属性 dbvisualizer hive_dbeaver中hive没有驱动属性

  • Kerberos认证,提前准备一个keytab文件,然后使用mit的工具来进行认证,在mit的目录下认证:C:\Program Files\MIT\Kerberos\bin

    认证之后

dbeaver中hive没有驱动属性 dbvisualizer hive_java_02

DBvisualizer 使用

这里需要使用到hive的驱动,但是Apache原生的跟这个Dbvisualizer的有点冲突,需要修改一下代码,可以使用我这里的,地址:https://pan.baidu.com/s/1b4enjajGXjs_AGE7kJYiGA 密码 zxw6,也可以使用我的代码,自己编译:https://github.com/changkunw/hive-jdbc 后面我会讲为什么用原生的有问题

只要驱动准备好了,那后面就简单了

dbeaver中hive没有驱动属性 dbvisualizer hive_hive_03

dbeaver中hive没有驱动属性 dbvisualizer hive_hive_04

dbeaver中hive没有驱动属性 dbvisualizer hive_apache_05

然后还要填一下jvm参数

dbeaver中hive没有驱动属性 dbvisualizer hive_dbeaver中hive没有驱动属性_06

dbeaver中hive没有驱动属性 dbvisualizer hive_hive_07

内容如下:

-Dsun.security.krb5.debug=true
-Djavax.security.auth.useSubjectCredsOnly=false
-Djava.security.krb5.conf=C:\Windows\krb5.ini

dbeaver中hive没有驱动属性 dbvisualizer hive_apache_08

dbeaver中hive没有驱动属性 dbvisualizer hive_apache_09

dbeaver中hive没有驱动属性 dbvisualizer hive_java_10

dbeaver中hive没有驱动属性 dbvisualizer hive_hive_11

我这里是hive2的驱动,这个地方的principal必须是要包含主机名的,而且这个地方还要注意的是,这个地方连接hive的jdbc是由url和database这两个字符串拼接出来的,所以principal这些参数可以填到databases这里

dbeaver中hive没有驱动属性 dbvisualizer hive_apache_12


自此已经连接上了。

为什么需要修改jdbc驱动

其实也不算修改jdbc驱动,只要是修改hadoop-common,不修改,会报下面的错误

java.lang.RuntimeException: Illegal Hadoop Version: Unknown (expected A.B.* format)
   at org.apache.hadoop.hive.shims.ShimLoader.getMajorVersion(ShimLoader.java:168)
   at org.apache.hadoop.hive.shims.ShimLoader.loadShims(ShimLoader.java:143)
   at org.apache.hadoop.hive.shims.ShimLoader.getHadoopThriftAuthBridge(ShimLoader.java:129)
   at org.apache.hive.service.auth.KerberosSaslHelper.getKerberosTransport(KerberosSaslHelper.java:54)
   at org.apache.hive.jdbc.HiveConnection.createBinaryTransport(HiveConnection.java:414)
   at org.apache.hive.jdbc.HiveConnection.openTransport(HiveConnection.java:191)
   at org.apache.hive.jdbc.HiveConnection.<init>(HiveConnection.java:155)
   at org.apache.hive.jdbc.HiveDriver.connect(HiveDriver.java:105)

原因如下:

dbeaver中hive没有驱动属性 dbvisualizer hive_hive_13


dbeaver中hive没有驱动属性 dbvisualizer hive_dbeaver中hive没有驱动属性_14


所以是dbVisualizer里面用到的类加载器和这个hadoop有点冲突,具体可以搜索一下Thread.currentThread().getContextClassLoader()和this.getClass().getClassLoader()这样获取类加载器在不同场景下是不一样的,然后我的代码里面是直接覆盖了org.apache.hadoop.util.VersionInfo这个类,其实修改方式有很多,也可以直接覆盖org.apache.hadoop.hive.shims.ShimLoader,直接返回一个正常版本就是