[HADOOP] 하이브 JDBC Kerberos 연결 오류
HADOOP하이브 JDBC Kerberos 연결 오류
JDBC를 통해 하이브 - 서버 2에 연결하려고합니다. 서버가 kerberos를 사용할 수 있습니다.
다음 코드를 사용하고 있는데 keytab 파일이있는 에지 노드의 코드를 실행하고 있습니다.
내가 뭘 놓치고 있니?
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
키탭에 Klist
Keytab name: FILE:.abcd.keytab
KVNO Principal
---- --------------------------------------------------------------------------
1 abcd@HADOOP_DEV9.xyz.COM
1 abcd@HADOOP_DEV9.xyz.COM
나는 오랫동안 그것에 붙어있어, 제발 도와주세요.
나는 이것을 학습에 사용했고 나는 그것을 따라 갔다.
해결법
-
==============================
1.아래와 같이 서비스 주체 "하이브"및 사용자 교장 "abcd"에 사용되는 Kerberos 영역 이름에 차이가있을 수 있습니다.
아래와 같이 서비스 주체 "하이브"및 사용자 교장 "abcd"에 사용되는 Kerberos 영역 이름에 차이가있을 수 있습니다.
hive/_HOST@<KDC_REALM_1> abcd@<KDC_REALM_2>
차이점이있을 경우 클러스터 관리자에게 확인하고 필요한 사항을 변경하십시오.
from https://stackoverflow.com/questions/47189866/hive-jdbc-kerberos-connectivity-error by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Hadoop 분할 불가능 TextInputFormat (0) | 2019.07.24 |
---|---|
[HADOOP] Spark 메모리에 TB 파일 실행 (0) | 2019.07.24 |
[HADOOP] modify hadoop-env.sh를 제외하고 hadoop에서 시스템 속성을 지정하는 방법? (0) | 2019.07.24 |
[HADOOP] org.apache.hadoop.security.AccessControlException : EC2에서 Hadoop Java API를 사용하여 S3 버킷을 통해 S3 버킷에 액세스하려고하면 권한이 거부되었습니다. (0) | 2019.07.24 |
[HADOOP] HBase 대 하이브 대 HDFS 대 하이브 (0) | 2019.07.24 |