Support Questions
Find answers, ask questions, and share your expertise
Announcements
Alert: Welcome to the Unified Cloudera Community. Former HCC members be sure to read and learn how to activate your account here.

Java - GSS initiate failed Exception, Caused by: org.apache.thrift.transport.TTransportException: GS

Solved Go to solution

Java - GSS initiate failed Exception, Caused by: org.apache.thrift.transport.TTransportException: GS

Contributor

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.

1 ACCEPTED SOLUTION

Accepted Solutions
Highlighted

Re: Java - GSS initiate failed Exception, Caused by: org.apache.thrift.transport.TTransportException

Expert Contributor

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).

1 REPLY 1
Highlighted

Re: Java - GSS initiate failed Exception, Caused by: org.apache.thrift.transport.TTransportException

Expert Contributor

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).

Don't have an account?
Coming from Hortonworks? Activate your account here