hiveserver2 kerberos 认证失败

故障现象:

最近hiveserver2突然出现了问题,症状表现为,通过beeline无法访问。错误的信息提示,找不到任何TGT。明显和kerberos身份认证有关。

与此同时,hdfs也出现类似的问题。查询hdfs,提示找不到任何TGT。

虽然在多台机器上出现了类似问题,但是服务似乎都是正常的。而且最关键的一件事情是,文件还能够稳定的从交换平台传过来。

如何解决 ?

由于问题出在beeline上,所以还是从beeline入手进行问题分析。

  1. hiveserver2的ldap身份认证,没有问题,仍然可以正常通过beeline访问。

  2. 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; do
         CLASSPATH=${CLASSPATH}:$f;
     done
     java -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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值