hiveserver2 kerberos 认证失败
為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??
故障現(xiàn)象:
最近hiveserver2突然出現(xiàn)了問題,癥狀表現(xiàn)為,通過beeline無法訪問。錯誤的信息提示,找不到任何TGT。明顯和kerberos身份認(rèn)證有關(guān)。
與此同時(shí),hdfs也出現(xiàn)類似的問題。查詢hdfs,提示找不到任何TGT。
雖然在多臺機(jī)器上出現(xiàn)了類似問題,但是服務(wù)似乎都是正常的。而且最關(guān)鍵的一件事情是,文件還能夠穩(wěn)定的從交換平臺傳過來。
如何解決 ?
由于問題出在beeline上,所以還是從beeline入手進(jìn)行問題分析。
hiveserver2的ldap身份認(rèn)證,沒有問題,仍然可以正常通過beeline訪問。
hiveserver2的kerberos身份認(rèn)證,也不是存在很大問題,主要是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();}}執(zhí)行以上程序,需要注意將相關(guān)的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這樣運(yùn)行時(shí),會提示輸入用戶名和密碼,如果輸入正確,則可以正常訪問hiveserver2.
或者設(shè)置環(huán)境變量:
export HADOOP_OPTS='-Djavax.security.auth.useSubjectCredsOnly=false'hdfs dfs -ls /使用能夠impersonate他人的帳戶(去core-site.xml里找proxyuser),然后發(fā)現(xiàn)列目錄也正常了。
轉(zhuǎn)載于:https://my.oschina.net/pearma/blog/1546934
總結(jié)
以上是生活随笔為你收集整理的hiveserver2 kerberos 认证失败的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 46. Ext中namespace的作用
- 下一篇: nginx+tomcat集群负载均衡中的