- Subscribe to RSS Feed
- Mark Question as New
- Mark Question as Read
- Float this Question for Current User
- Bookmark
- Subscribe
- Mute
- Printer Friendly Page
Java - GSS initiate failed Exception, Caused by: org.apache.thrift.transport.TTransportException: GS
- Labels:
-
Apache Hive
-
Kerberos
Created on 03-20-2018 07:40 AM - edited 09-16-2022 05:59 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I am trying to retrieve records from the Hive tables. For that I have written the following connection in Java.
public static Connection getHiveConnection() throws IOException, SQLException { System.out.println("Preparing Hive connection1"); Configuration conf = new Configuration(); conf.set("hadoop.security.authentication", "Kerberos"); System.setProperty("java.security.krb5.kdc", "ip-x-x-x-x.bc9.internal"); System.setProperty("java.security.krb5.realm", "ABCDEV.COM"); UserGroupInformation.loginUserFromKeytab("username@ABCDEV.COM", "/home/username/username.keytab"); // UserGroupInformation.setConfiguration(conf); System.out.println("Kerberos Connected"); // Hive Connection try { Class.forName("org.apache.hive.jdbc.HiveDriver"); if((hiveConnection == null) || hiveConnection.isClosed()) { hiveConnection = DriverManager.getConnection("jdbc:hive2://x.x.x.x.x:10500/schema;principal=hive/_HOST@ABCDEV.COM", "user", "pwd"); return hiveConnection; } else { return hiveConnection; } } catch (ClassNotFoundException e) { e.printStackTrace(); return null; } catch (SQLException e) { e.printStackTrace(); return null; } }
When I try to use the connection from this class, in other class like below:
Connection hiveCon = (Connection) DbManager.getHiveConnection(); PreparedStatement hive_pstmnt = hiveCon.prepareStatement(hiveCountQuery); ResultSet hiveRs = hive_pstmnt.executeQuery();
I am getting the exception:
Preparing Hive connection1 SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. Kerberos Connected java.sql.SQLException: Could not open client transport with JDBC Uri: jdbc:hive2://x.x.x.x.x:10500/schema;principal=hive/_HOST@ABCDEV.COM: GSS initiate failed Caused by: org.apache.thrift.transport.TTransportException: GSS initiate failed
In the code, I have commented the line: UserGroupInformation.setConfiguration(conf); and if I remove the comments and execute the code, I get a different exception:
Exception in thread "main" java.lang.reflect.InvocationTargetException 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:498) at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58) Caused by: java.lang.IllegalArgumentException: Invalid attribute value for hadoop.security.authentication of Kerberos at org.apache.hadoop.security.UserGroupInformation.initialize(UserGroupInformation.java:200) at org.apache.hadoop.security.UserGroupInformation.setConfiguration(UserGroupInformation.java:227) at com.dbconnections.gphive.DbManager.getHiveConnection(DbManager.java:24)
I have done kinit and generated the ticket just to make sure the ticket has valid time period. Could anyone let me know what is the mistake I am doing here so that can correct the code.
Created 03-20-2018 08:11 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
The error complains about the value of "hadoop.security.authentication". You have set it to "Kerberos" while the accepted values are "simple" and "kerberos" (all letters in lowercase).
Created 03-20-2018 08:11 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
The error complains about the value of "hadoop.security.authentication". You have set it to "Kerberos" while the accepted values are "simple" and "kerberos" (all letters in lowercase).
