Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,18 @@ public class FluoConfiguration extends SimpleConfiguration {

// Client properties
private static final String CLIENT_PREFIX = FLUO_PREFIX + ".client";
/**
* @since 1.3.0
*/
public static final String CLIENT_HDFS_KERBEROS = CLIENT_PREFIX + ".hdfs.kerberos";
/**
* @since 1.3.0
*/
public static final String CLIENT_HDFS_KERBEROS_REALM = CLIENT_PREFIX + ".hdfs.kerberos.realm";
/**
* @since 1.3.0
*/
public static final String CLIENT_HDFS_KERBEROS_KEYTAB = CLIENT_PREFIX + ".hdfs.kerberos.keytab";
/**
* @deprecated since 1.2.0 replaced by fluo.connection.application.name
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.security.UserGroupInformation;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.KeeperException.NodeExistsException;
import org.slf4j.Logger;
Expand All @@ -76,6 +77,28 @@ public class FluoAdminImpl implements FluoAdmin {

private final String appRootDir;

/**
* Kerberos autentication method.
*
* @param realm Realm to be used in authentication.
* @param keytab Keytab path.
* @since 1.3.0
*/
public void hdfsLoginWithKerberos(final String realm, final String keytab) {

try {
Configuration conf = new Configuration();
conf.set("hadoop.security.authentication", "kerberos");
conf.set("hadoop.security.authorization", "true");
UserGroupInformation.setConfiguration(conf);
UserGroupInformation.loginUserFromKeytab(realm, keytab);

logger.info("Connected with REALM: '{}'.", realm);
} catch (Exception e) {
throw new RuntimeException(e);
}
}

public FluoAdminImpl(FluoConfiguration config) {
this.config = config;

Expand Down Expand Up @@ -373,6 +396,14 @@ public static String copyDirToDfs(String dfsRoot, String appName, String srcDir,
}

private String copyJarsToDfs(String jars, String destDir) {

if (config.getClientConfiguration().getBoolean(FluoConfiguration.CLIENT_HDFS_KERBEROS, false)) {
this.hdfsLoginWithKerberos(
config.getClientConfiguration().getString(FluoConfiguration.CLIENT_HDFS_KERBEROS_REALM, ""),
config.getClientConfiguration().getString(FluoConfiguration.CLIENT_HDFS_KERBEROS_KEYTAB, ""));
}


String dfsAppRoot = config.getDfsRoot() + "/" + config.getApplicationName();
String dfsDestDir = dfsAppRoot + "/" + destDir;

Expand Down