天天看點

SSM+impala+Kerberos認證

說明

這是我們項目所使用通過impala來操作hive,項目架構為:Spring+SpringMVC+mybatis+shiro,前期使用的MySQL資料庫,但是後來Hadoop集市建立好了,需要連接配接到Hadoop,但是有些業務還是得連接配接MySQL資料庫。是以配置的雙資料源。下面就給了通過impala驅動來操作hive。也可以通過phoenix連接配接hbase來實作,因為項目的原因,通過impala連接配接改動的地方少一些。而且Hadoop開啟了安全認證,連接配接Hadoop需要通過kerberos認證。但是這些都少不了一個資深的Hadoop大神架構師陪你一起。

一、配置dbconfig.properties資料連接配接位址

1.impala.driverClass=com.cloudera.impala.jdbc4.Driver 
2.impala.driverUrl=jdbc:impala://IP位址:21050/pa;AuthMech=1;KrbRealm=HADOOP.COM;KrbHostFQDN=XXX;KrbServiceName=impala;SSL=1;AllowSelfSignedCerts=1;CAIssuedCertNamesMismatch=1;KrbAuthType=1
filters=stat

maxActive=20
initialSize=1
maxWait=60000
minIdle=10
maxIdle=15

timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=300000
readTimeout=600000   
validationQuery=SELECT 'x'
testWhileIdle=true
testOnBorrow=false
testOnReturn=false
maxOpenPreparedStatements=20
removeAbandoned=true
removeAbandonedTimeout=1800
logAbandoned=true

#使用的是impala驅動,也可以使用hive的驅動,但是我發現使用impala的驅動相容性更好些。
使用的jar包為impala官網下載下傳的,ClouderaImpalaJDBC4_2.5.43驅動。
           

提供下我整理的jar,歡迎下載下傳https://download.csdn.net/download/weixin_41963652/10332377

二、spring,通過druid連接配接池管理

<!-- 阿裡 druid資料庫連接配接池 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
        destroy-method="close">
        <!-- 資料庫基本資訊配置 -->
        <property name="url" value="${impala.driverUrl}" />
         <property name="driverClassName" value="${impala.driverClass}" />
        <!-- 最大并發連接配接數 -->
        <property name="maxActive" value="${maxActive}" />
        <!-- 初始化連接配接數量 -->
        <property name="initialSize" value="${initialSize}" />
        <!-- 配置擷取連接配接等待逾時的時間 -->
        <property name="maxWait" value="${maxWait}" />
        <!-- 最小空閑連接配接數 -->
        <property name="minIdle" value="${minIdle}" />
        <!-- 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接配接,機關是毫秒 -->
        <property name="timeBetweenEvictionRunsMillis" value="${timeBetweenEvictionRunsMillis}" />
        <!-- 配置一個連接配接在池中最小生存的時間,機關是毫秒 -->
        <property name="minEvictableIdleTimeMillis" value="${minEvictableIdleTimeMillis}" />
        <property name="validationQuery" value="${validationQuery}" />
        <property name="testWhileIdle" value="${testWhileIdle}" />
        <property name="testOnBorrow" value="${testOnBorrow}" />
        <property name="testOnReturn" value="${testOnReturn}" />
        <property name="maxOpenPreparedStatements" value="${maxOpenPreparedStatements}" />
        <!-- 打開removeAbandoned功能 -->
        <property name="removeAbandoned" value="${removeAbandoned}" />
        <!-- 1800秒,也就是30分鐘 -->
        <property name="removeAbandonedTimeout" value="${removeAbandonedTimeout}" />
        <!-- 關閉abanded連接配接時輸出錯誤日志 -->
        <property name="logAbandoned" value="${logAbandoned}" />
    </bean>
           

三、寫一個監聽器,連接配接impala之前擷取kerberos認證。

package com.fh.util.wxpay;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import com.fh.util.Const;
import com.fh.util.PathUtil;

public class getKerberosJaax implements ServletContextListener {
    private static String driverName = "com.cloudera.impala.jdbc4.Driver";
      @Override  
        public void contextInitialized(ServletContextEvent arg0) {  
         String krbCfg = PathUtil.getClasspath() +  Const.FILEPATHFILE+"krb5.conf";//krb5.conf檔案放置的路徑
         //krb5.conf為impala配置檔案
          //gss-jaas.conf也為impala拉下來的配置檔案
         System.setProperty("java.security.auth.login.config",PathUtil.getClasspath() +  Const.FILEPATHFILE+"gss-jaas.conf");//PathUtil.getClasspath() +  Const.FILEPATHFILE+"gss-jaas.conf"為檔案放置的檔案
         System.setProperty("sun.security.jgss.debug","true");
         System.setProperty("javax.security.auth.useSubjectCredsOnly","false");
         System.setProperty("java.security.krb5.conf", krbCfg);

      }


        @Override  
        public void contextDestroyed(ServletContextEvent arg0) {  
            // TODO Auto-generated method stub  

        }  
}
附:gss-jaas.conf檔案
/* 
   Remove the principal= line if you want to specify user at prompt. Otherwise 
 set it to the correct principal. 
   */ 
 Client { 
 com.sun.security.auth.module.Krb5LoginModule required 
 useKeyTab=true
 principal="impala/[email protected]"
 doNotPrompt=false
 debug=true; 
}; 

附:web.xml監聽器配置
  <listener>  
  <listener-class>
    com.fh.util.wxpay.getKerberosJaax
  </listener-class>  
</listener> 
           
下一篇: 副業

繼續閱讀