In this tutorial I will show you how to connect to remote Kerberos HDFS cluster using Java. If you haven’t install hdfs with kerberos yet follow the tutorial.
Import SSL Cert to Java:
Follow this tutorial to “Installing unlimited strength encryption Java libraries”
If on Windows do the following
- #Import it
- "C:\Program Files\Java\jdk1.8.0_171\bin\keytool" -import -file hadoop.csr -keystore "C:\Program Files\Java\jdk1.8.0_171\jre\lib\security\cacerts" -alias "hadoop"
- #Check it
- "C:\Program Files\Java\jdk1.8.0_171\bin\keytool" -list -v -keystore "C:\Program Files\Java\jdk1.8.0_171\jre\lib\security\cacerts"
- #If you want to delete it
- "C:\Program Files\Java\jdk1.8.0_171\bin\keytool" -delete -alias hadoop -keystore "C:\Program Files\Java\jdk1.8.0_171\jre\lib\security\cacerts"
POM.xml:
- <dependency>
- <groupId>org.apache.hadoop</groupId>
- <artifactId>hadoop-client</artifactId>
- <version>2.9.1</version>
- </dependency>
Imports:
- import org.apache.hadoop.conf.Configuration;
- import org.apache.hadoop.fs.FileStatus;
- import org.apache.hadoop.fs.FileSystem;
- import org.apache.hadoop.fs.Path;
- import org.apache.hadoop.security.UserGroupInformation;
Connect:
- // Setup the configuration object.
- final Configuration config = new Configuration();
- config.set("fs.defaultFS", "swebhdfs://hadoop:50470");
- config.set("hadoop.security.authentication", "kerberos");
- config.set("hadoop.rpc.protection", "integrity");
- System.setProperty("https.protocols", "TLSv1,TLSv1.1,TLSv1.2");
- System.setProperty("java.security.krb5.conf", "C:\\Program Files\\Java\\jdk1.8.0_171\\jre\\lib\\security\\krb5.conf");
- System.setProperty("java.security.krb5.realm", "REALM.CA");
- System.setProperty("java.security.krb5.kdc", "REALM.CA");
- System.setProperty("sun.security.krb5.debug", "true");
- System.setProperty("javax.net.debug", "all");
- System.setProperty("javax.net.ssl.keyStorePassword","YOURPASSWORD");
- System.setProperty("javax.net.ssl.keyStore","C:\\Program Files\\Java\\jdk1.8.0_171\\jre\\lib\\security\\cacerts");
- System.setProperty("javax.net.ssl.trustStore", "C:\\Program Files\\Java\\jdk1.8.0_171\\jre\\lib\\security\\cacerts");
- System.setProperty("javax.net.ssl.trustStorePassword","YOURPASSWORD");
- System.setProperty("javax.security.auth.useSubjectCredsOnly", "false");
- UserGroupInformation.setConfiguration(config);
- UserGroupInformation.setLoginUser(UserGroupInformation.loginUserFromKeytabAndReturnUGI("myuser/hadoop@REALM.CA", "c:\\data\\myuser.keytab"));
- System.out.println(UserGroupInformation.getLoginUser());
- System.out.println(UserGroupInformation.getCurrentUser());