diff --git a/configuration.md b/configuration.md
index 8990d58..ba6ae37 100644
--- a/configuration.md
+++ b/configuration.md
@@ -141,6 +141,36 @@ default values.
role configured in "mapred.mesos.role".
+
+ mapred.mesos.framework.name
+ hadoop
+
+ This is the Mesos framework name. Defaults to Hadoop plus port information.
+
+
+
+ mapred.mesos.framework.principal
+ hadoop
+
+ This is the Mesos framework principal. It is used for framework authentication.
+ Consult the Mesos documentation for details.
+
+
+
+ mapred.mesos.framework.secretfile
+ /location/secretfile
+
+ Location of the file holding the Mesos framework secret. It is used for framework authentication.
+ Consult the Mesos documentation for details. Caution: avoid newline characters, some editor place these before end of file.
+
+
+
+ mapred.mesos.framework.user
+ hadoop
+
+ This is the user the Mesos framework runs as. If left unset, it defaults to the user running the scheduler.
+
+
diff --git a/src/main/java/org/apache/hadoop/mapred/MesosScheduler.java b/src/main/java/org/apache/hadoop/mapred/MesosScheduler.java
index 6577fe1..d80d067 100644
--- a/src/main/java/org/apache/hadoop/mapred/MesosScheduler.java
+++ b/src/main/java/org/apache/hadoop/mapred/MesosScheduler.java
@@ -1,6 +1,7 @@
package org.apache.hadoop.mapred;
import com.codahale.metrics.Meter;
+import com.google.protobuf.ByteString;
import org.apache.commons.httpclient.HttpHost;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -14,6 +15,7 @@
import org.apache.mesos.hadoop.Metrics;
import java.io.File;
+import java.io.FileInputStream;
import java.io.IOException;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
@@ -364,10 +366,35 @@ public synchronized void start() throws IOException {
String master = conf.get("mapred.mesos.master", "local");
try {
- FrameworkInfo frameworkInfo = FrameworkInfo.newBuilder().setUser("") // Let Mesos fill in the user.
- .setCheckpoint(conf.getBoolean("mapred.mesos.checkpoint", false)).setRole(conf.get("mapred.mesos.role", "*")).setName("Hadoop: (RPC port: " + jobTracker.port + "," + " WebUI port: " + jobTracker.infoPort + ")").build();
-
- driver = new MesosSchedulerDriver(this, frameworkInfo, master);
+ FrameworkInfo frameworkInfo;
+ FrameworkInfo.Builder frameworkInfoBuilder = FrameworkInfo.newBuilder()
+ .setUser(conf.get("mapred.mesos.framework.user", "")) // Let Mesos fill in the user.
+ .setCheckpoint(conf.getBoolean("mapred.mesos.checkpoint", false))
+ .setRole(conf.get("mapred.mesos.role", "*"))
+ .setName(conf.get("mapred.mesos.framework.name", "Hadoop: (RPC port: " + jobTracker.port + ","
+ + " WebUI port: " + jobTracker.infoPort + ")"));
+
+ Credential credential=null;
+
+ String frameworkPrincipal = conf.get("mapred.mesos.framework.principal");
+ if (frameworkPrincipal != null) {
+ frameworkInfoBuilder.setPrincipal(frameworkPrincipal);
+ String secretFile = conf.get("mapred.mesos.framework.secretfile");
+ if (secretFile != null) {
+ credential = Credential.newBuilder()
+ .setSecret(ByteString.readFrom(new FileInputStream(secretFile)))
+ .setPrincipal(frameworkPrincipal)
+ .build();
+ }
+ }
+ if (credential == null) {
+ LOG.info("Creating Schedule Driver");
+ driver = new MesosSchedulerDriver(this, frameworkInfoBuilder.build(), master);
+ } else {
+ LOG.info("Creatingg Schedule Driver, attempting to authenticate with Principal: " + credential.getPrincipal()
+ + ", secret:" + credential.getSecret());
+ driver = new MesosSchedulerDriver(this, frameworkInfoBuilder.build(), master,credential);
+ }
driver.start();
} catch (Exception e) {
// If the MesosScheduler can't be loaded, the JobTracker won't be useful