JDBC连接Impala使用Kerberos扫盲

/ JAVA WEB / 没有评论 / 5270浏览

     本帖仅限于扫盲!

      在2017年陆续在几个省上了IFRS财务系统;该系统的前台部分(HTML+JAVA)由我设计和开发;用户的数据都存储在大数据平台中,我们使用的是hive & impala;我们程序在做报表展示、合同信息展示时都是从impala中查询。

      移动的几个省大数据平台都使用了Kerberos做认证。17年三月份才第一次接触Kerberos,对其一脸懵逼!起初开发时用的是公司的大数据环境,方便起见自然是没有认证的;到了安徽移动部署时也没有人告知有认证这个东西;所以一个在我认知范围之外的东西折腾了2天时间;系统部署完毕基础功能都正常使用;就是无法访问impala。根据错误网上搜索才一步步的了解Kerberos。

        Kerberos   认证流程和原理;附图一张:

        

       短暂岔开一下话题;我们公司人数已经达到近3000人;分支、产品线 十字交叉型组织架构;导致各个门户之见相互独立,尤其在大系统团队中;事情确实比较多;导致沟通成本大大提升;拿Impala来举例;按照正常的逻辑项目在移动落地前期响应的资源已经做了申请;我们作为开发和实施团队;在入场时应该收到一份现场硬件和软件环境的基本信息;结果并没有;甚至没有人告诉你Mysql数据库在什么地方、IP端口、用户名密码;也没有人告诉你impala部署基本信息;你得主动的去找人问;其实这也无所谓;沟通嘛!结果呢兄弟部门的人是挤牙膏式的你问一点就告诉你一点;这玩意就好比黑盒;你进去后很懵逼;但是明白人就是不告诉你;你就得从0开始去了解现场的各种情况;极大的浪费时间;遇到门户不是抱着相互之间积极沟通解决的姿态;各种推托;总说:哦,这个不是我的事情;我也不知道。最终你得细致梳理协调;发现就是他应该做的事情;而且就是他工作疏忽导致的。

     好回到认证上来;

     JAVA通过JDBC连接Impala如果遇到需要Kerberos认证,通常有两种方式来实现:

一、服务器认证

      所谓服务器认证就是部署web的服务器提供认证支持;JDBC程序本身可以忽略认证这回事! 这种方式需要你手上有Kerberos秘钥分发中心(KDC)提供的NAME.keytab文件,NAME是通常是用户名;然后在Web服务器上执行过kint命令进行认证;在通过klist来查看认证信息;注意:认证是有时效的;最好用crontab定时做认证!推荐这种方式!

二、JAVA程序认证

      程序认证就是在使用JDBC连接库之前,使用JAVA程序进行Kerberos认证,需要使用到的文件有.keytab 文件&krb5.conf  可能还会用到core.xml 和 hdfs.xml;我们系统是可配置化的;在系统参数配置中如果用户配置了认证文件路径就默认走java认证方式;如果未配置相关文件路径,系统认为已通过服务器认证;这样就可以适配不同省份的差异。