hive jdbc权限不够,Hive JDBC Kerberos连接错误

I am trying to connect to Hive-Server2 via JDBC.Server is kerberos enabled.

I am using the following code,I am running the code of an edge node where keytab file is present

What am I missing?

import org.apache.hadoop.security.UserGroupInformation;

public class HiveJdbcClient {

private static String driverName = "org.apache.hive.jdbc.HiveDriver";

public static void main(String[] args)

throws SQLException, IOException, ClassNotFoundException {

org.apache.hadoop.conf.Configuration conf = new org.apache.hadoop.conf.Configuration();

conf.set("hadoop.security.authentication", "Kerberos");

UserGroupInformation.setConfiguration(conf);

int ch = 1;

String USER = (ch == 0) ? "hive/_HOST@HADOOP_DEV9.xyz.COM"

: "abcd@HADOOP_DEV9.xyz.COM";

String PASSWORD = (ch == 0) ? "/etc/security/keytabs/hive.service.keytab"

: "/u/users/abcd/.abcd.keytab";

System.out.println("User = " + USER + "Keytab =" + PASSWORD);

File f = new File(PASSWORD);

if (f.exists()) {

System.out.println("File exists");

} else {

System.out.println("File not exists");

}

UserGroupInformation.loginUserFromKeytab(USER, PASSWORD);

String ConnectionURL = "jdbc:hive2://tstr400382.xyz.com:2181,tstr400383.xyz.com:2181,tstr400384.xyz.com:2181,tstr400386.xyz.com:2181,tstr400387.xyz.com:2181/;"

+ "serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2"

+ ";principal=hive/_HOST@HADOOP_DEV9.xyz.COM;transportMode=http;httpPath=cliservice";

System.out.println("below connection url");

Class.forName(driverName);

Connection con = DriverManager.getConnection(ConnectionURL);

Statement stmt = con.createStatement();

String sql = "show databases;";

System.out.println("Running: " + sql);

ResultSet res = stmt.executeQuery(sql);

if (res.next()) {

System.out.println(res.getString(1));

}

}

}

I am getting following error

Exception in thread "main" java.io.IOException: Login failure for abcd@HADOOP_DEV9.xyz.COM from keytab /u/users/abcd/.abcd.keytab: javax.security.auth.login.LoginException: Unable to obtain password from user

at org.apache.hadoop.security.UserGroupInformation.loginUserFromKeytab(UserGroupInformation.java:1098)

at hadoop.test.HiveJdbcClient.main(HiveJdbcClient.java:42)

Caused by: javax.security.auth.login.LoginException: Unable to obtain password from user

at com.sun.security.auth.module.Krb5LoginModule.promptForPass(Krb5LoginModule.java:897)

at com.sun.security.auth.module.Krb5LoginModule.attemptAuthentication(Krb5LoginModule.java:760)

at com.sun.security.auth.module.Krb5LoginModule.login(Krb5LoginModule.java:617)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:483)

at javax.security.auth.login.LoginContext.invoke(LoginContext.java:755)

at javax.security.auth.login.LoginContext.access$000(LoginContext.java:195)

at javax.security.auth.login.LoginContext$4.run(LoginContext.java:682)

at javax.security.auth.login.LoginContext$4.run(LoginContext.java:680)

at java.security.AccessController.doPrivileged(Native Method)

at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:680)

at javax.security.auth.login.LoginContext.login(LoginContext.java:587)

at org.apache.hadoop.security.UserGroupInformation.loginUserFromKeytab(UserGroupInformation.java:1089)

I am able to do

kinit -kt /u/users/abcd/.abcd.keytab abcd@HADOOP_DEV9.xyz.COM

Klist on keytab

Keytab name: FILE:.abcd.keytab

KVNO Principal

---- --------------------------------------------------------------------------

1 abcd@HADOOP_DEV9.xyz.COM

1 abcd@HADOOP_DEV9.xyz.COM

I am stuck on it from a long time,please help.

I used this for learning and I followed it

解决方案

There could be a difference in the Kerberos realm names used for the service principal "hive" and user principal "abcd" as mentioned below:

hive/_HOST@

abcd@

Please verify with your cluster administrator and make the necessary changes if there is a difference.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值