Ramakrishna rayudu
Ramakrishna rayudu

Reputation: 1

Cloudera HDFS connection is failing at Kerberos login

I am using this code to connect to Cloudera HDFS:

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.security.UserGroupInformation;

import java.io.IOException;

public class HDFSConnectionExample {
    public static void main(String[] args) {
        // Set Kerberos configuration
        System.setProperty("java.security.krb5.conf", "/path/to/krb5.conf");

        // Initialize Hadoop Configuration
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://your-namenode-host:8020");
        conf.set("hadoop.security.authentication", "kerberos");
        conf.set("hadoop.security.authorization", "true");

        // Set Kerberos principal and keytab (if using keytab)
        conf.set("dfs.namenode.kerberos.principal", "your/kerberos/[email protected]");

        try {
            // Authenticate using Kerberos
            UserGroupInformation.setConfiguration(conf);
            UserGroupInformation.loginUserFromKeytab("your/kerberos/[email protected]", "/path/to/your.keytab");

            // Connect to HDFS
            FileSystem fs = FileSystem.get(conf);

            // Perform HDFS operations (e.g., read a file)
            Path filePath = new Path("/path/to/your/hdfs/file");
            FSDataInputStream in = fs.open(filePath);
            String fileContent = in.readUTF();
            System.out.println("File Content: " + fileContent);
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

but it's failing with this error:

javax.security.auth.login.LoginException: Pre-authentication information was invalid (24)
   at com.sun.security.auth.module.Krb5LoginModule.attemptAuthentication(Krb5LoginModule.java:804)
   at com.sun.security.auth.module.Krb5LoginModule.login(Krb5LoginModule.java:617)
   at sun.security.krb5.internal.KDCRep.init(KDCRep.java:140)
   at sun.security.krb5.internal.ASRep.init(ASRep.java:64)
   at sun.security.krb5.internal.ASRep.<init>(ASRep.java:59)
   at sun.security.krb5.KrbAsRep.<init>(KrbAsRep.java:60)
   ... 105 more

I tried the code above with many different options.

Tried passing jaas config file, hdfs-site.xml, and core-site.xml with no luck

Upvotes: 0

Views: 34

Answers (0)

Related Questions