|
1 | 1 | package org.apache.hadoop.mapred; |
2 | 2 |
|
3 | 3 | import com.codahale.metrics.Meter; |
| 4 | +import com.google.protobuf.ByteString; |
4 | 5 | import org.apache.commons.httpclient.HttpHost; |
5 | 6 | import org.apache.commons.logging.Log; |
6 | 7 | import org.apache.commons.logging.LogFactory; |
|
14 | 15 | import org.apache.mesos.hadoop.Metrics; |
15 | 16 |
|
16 | 17 | import java.io.File; |
| 18 | +import java.io.FileInputStream; |
17 | 19 | import java.io.IOException; |
18 | 20 | import java.util.*; |
19 | 21 | import java.util.concurrent.ConcurrentHashMap; |
@@ -364,10 +366,35 @@ public synchronized void start() throws IOException { |
364 | 366 | String master = conf.get("mapred.mesos.master", "local"); |
365 | 367 |
|
366 | 368 | try { |
367 | | - FrameworkInfo frameworkInfo = FrameworkInfo.newBuilder().setUser("") // Let Mesos fill in the user. |
368 | | - .setCheckpoint(conf.getBoolean("mapred.mesos.checkpoint", false)).setRole(conf.get("mapred.mesos.role", "*")).setName("Hadoop: (RPC port: " + jobTracker.port + "," + " WebUI port: " + jobTracker.infoPort + ")").build(); |
369 | | - |
370 | | - driver = new MesosSchedulerDriver(this, frameworkInfo, master); |
| 369 | + FrameworkInfo frameworkInfo; |
| 370 | + FrameworkInfo.Builder frameworkInfoBuilder = FrameworkInfo.newBuilder() |
| 371 | + .setUser(conf.get("mapred.mesos.framework.user", "")) // Let Mesos fill in the user. |
| 372 | + .setCheckpoint(conf.getBoolean("mapred.mesos.checkpoint", false)) |
| 373 | + .setRole(conf.get("mapred.mesos.role", "*")) |
| 374 | + .setName(conf.get("mapred.mesos.framework.name", "Hadoop: (RPC port: " + jobTracker.port + "," |
| 375 | + + " WebUI port: " + jobTracker.infoPort + ")")); |
| 376 | + |
| 377 | + Credential credential = null; |
| 378 | + |
| 379 | + String frameworkPrincipal = conf.get("mapred.mesos.framework.principal"); |
| 380 | + if (frameworkPrincipal != null) { |
| 381 | + frameworkInfoBuilder.setPrincipal(frameworkPrincipal); |
| 382 | + String secretFile = conf.get("mapred.mesos.framework.secretfile"); |
| 383 | + if (secretFile != null) { |
| 384 | + credential = Credential.newBuilder() |
| 385 | + .setSecret(ByteString.readFrom(new FileInputStream(secretFile))) |
| 386 | + .setPrincipal(frameworkPrincipal) |
| 387 | + .build(); |
| 388 | + } |
| 389 | + } |
| 390 | + if (credential == null) { |
| 391 | + LOG.info("Creating Schedule Driver"); |
| 392 | + driver = new MesosSchedulerDriver(this, frameworkInfoBuilder.build(), master); |
| 393 | + } else { |
| 394 | + LOG.info("Creatingg Schedule Driver, attempting to authenticate with Principal: " + credential.getPrincipal() |
| 395 | + + ", secret:" + credential.getSecret()); |
| 396 | + driver = new MesosSchedulerDriver(this, frameworkInfoBuilder.build(), master, credential); |
| 397 | + } |
371 | 398 | driver.start(); |
372 | 399 | } catch (Exception e) { |
373 | 400 | // If the MesosScheduler can't be loaded, the JobTracker won't be useful |
|
0 commit comments