gpt4 book ai didi

hadoop - Hive JDBC Kerberos 连接错误

转载 作者:可可西里 更新时间:2023-11-01 15:26:08 24 4
gpt4 key购买 nike

我正在尝试通过 JDBC 连接到 Hive-Server2。服务器启用了 kerberos。

我正在使用以下代码,我正在运行存在 key 表文件的边缘节点的代码

我错过了什么?

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));
}

}
}

出现以下错误

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)

我能做到

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

keytab 上的 Klist

Keytab name: FILE:.abcd.keytab
KVNO Principal
---- --------------------------------------------------------------------------
1 abcd@HADOOP_DEV9.xyz.COM
1 abcd@HADOOP_DEV9.xyz.COM

我卡了很久了,请帮忙。

我用了this为了学习,我遵循了它

最佳答案

用于服务主体“hive”和用户主体“abcd”的 Kerberos 域名可能有所不同,如下所述:

hive/_HOST@<KDC_REALM_1>

abcd@<KDC_REALM_2>

请与您的集群管理员核实,如果有差异,请进行必要的更改。

关于hadoop - Hive JDBC Kerberos 连接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47189866/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com