工具
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
如下图
- Kerberos认证,提前准备一个keytab文件,然后使用mit的工具来进行认证,在mit的目录下认证:C:\Program Files\MIT\Kerberos\bin
认证之后
DBvisualizer 使用
这里需要使用到hive的驱动,但是Apache原生的跟这个Dbvisualizer的有点冲突,需要修改一下代码,可以使用我这里的,地址:https://pan.baidu.com/s/1b4enjajGXjs_AGE7kJYiGA 密码 zxw6,也可以使用我的代码,自己编译:https://github.com/changkunw/hive-jdbc 后面我会讲为什么用原生的有问题
只要驱动准备好了,那后面就简单了
然后还要填一下jvm参数
内容如下:
-Dsun.security.krb5.debug=true
-Djavax.security.auth.useSubjectCredsOnly=false
-Djava.security.krb5.conf=C:\Windows\krb5.ini
我这里是hive2的驱动,这个地方的principal必须是要包含主机名的,而且这个地方还要注意的是,这个地方连接hive的jdbc是由url和database这两个字符串拼接出来的,所以principal这些参数可以填到databases这里
自此已经连接上了。
为什么需要修改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)
原因如下:
所以是dbVisualizer里面用到的类加载器和这个hadoop有点冲突,具体可以搜索一下Thread.currentThread().getContextClassLoader()和this.getClass().getClassLoader()这样获取类加载器在不同场景下是不一样的,然后我的代码里面是直接覆盖了org.apache.hadoop.util.VersionInfo这个类,其实修改方式有很多,也可以直接覆盖org.apache.hadoop.hive.shims.ShimLoader,直接返回一个正常版本就是