hiveserver2 kerberos 认证失败
生活随笔
收集整理的這篇文章主要介紹了
hiveserver2 kerberos 认证失败
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
為什么80%的碼農都做不了架構師?>>> ??
故障現象:
最近hiveserver2突然出現了問題,癥狀表現為,通過beeline無法訪問。錯誤的信息提示,找不到任何TGT。明顯和kerberos身份認證有關。
與此同時,hdfs也出現類似的問題。查詢hdfs,提示找不到任何TGT。
雖然在多臺機器上出現了類似問題,但是服務似乎都是正常的。而且最關鍵的一件事情是,文件還能夠穩定的從交換平臺傳過來。
如何解決 ?
由于問題出在beeline上,所以還是從beeline入手進行問題分析。
hiveserver2的ldap身份認證,沒有問題,仍然可以正常通過beeline訪問。
hiveserver2的kerberos身份認證,也不是存在很大問題,主要是beeline訪問不了,自己寫的客戶端還是可以訪問的。例如以下這段程序:
package com.pear;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class Main {private static String driverName = "org.apache.hive.jdbc.HiveDriver";public static void main(String[] args) throws SQLException {try {Class.forName(driverName);} catch (ClassNotFoundException e) {e.printStackTrace();System.exit(1);}String JDBC_DB_URL = "jdbc:hive2://uatmaster01:10000/default;principal=hive/_HOST@MCIPT.COM;auth=kerberos";Connection con = DriverManager.getConnection(JDBC_DB_URL);Statement stmt = con.createStatement();String sql = "select * from empdata where id=1";ResultSet res = stmt.executeQuery(sql);System.out.println("Running: " + sql);while (res.next()) {System.out.println(res.getString(1));System.out.println(res.getString(2));}res.close();stmt.close();con.close();}}執行以上程序,需要注意將相關的jar包,都放在classpath里。所有,最好寫一個腳本:
for f in /opt/cloudera/parcels/CDH/jars/*.jar; doCLASSPATH=${CLASSPATH}:$f;donejava -cp $CLASSPATH:. -Djavax.security.auth.useSubjectCredsOnly=false com.pear.Main這樣運行時,會提示輸入用戶名和密碼,如果輸入正確,則可以正常訪問hiveserver2.
或者設置環境變量:
export HADOOP_OPTS='-Djavax.security.auth.useSubjectCredsOnly=false'hdfs dfs -ls /使用能夠impersonate他人的帳戶(去core-site.xml里找proxyuser),然后發現列目錄也正常了。
轉載于:https://my.oschina.net/pearma/blog/1546934
總結
以上是生活随笔為你收集整理的hiveserver2 kerberos 认证失败的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 46. Ext中namespace的作用
- 下一篇: nginx+tomcat集群负载均衡中的