title: Java - GSS initiate failed Exception, Caused by: org.apache.thrift.transport.TTransportException: GSS initiate failed
body: <p>I am trying to retrieve records from the Hive tables. For that I have written the following connection in Java.</p>
  
  <pre><code>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;
      }
  }
  </code></pre>
  
  <p>When I try to use the connection from this class, in other class like below:</p>
  
  <pre><code>Connection hiveCon = (Connection) DbManager.getHiveConnection();
  PreparedStatement hive_pstmnt =  hiveCon.prepareStatement(hiveCountQuery);
  ResultSet hiveRs = hive_pstmnt.executeQuery();
  </code></pre>
  
  <p>I am getting the exception:</p>
  
  <pre><code>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
  </code></pre>
  
  <p>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:</p>
  
  <pre><code>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)
  </code></pre>
  
  <p>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.</p>