diff --git a/configuration.md b/configuration.md index ab66d78..24f9bfa 100644 --- a/configuration.md +++ b/configuration.md @@ -133,6 +133,14 @@ default values. Mesos reservations. Consult the Mesos documentation for details. + + mapred.mesos.role.strict + false + + Force the framework to only ever accept resource offers that are of the + role configured in "mapred.mesos.role". + + diff --git a/src/main/java/org/apache/hadoop/mapred/ResourcePolicy.java b/src/main/java/org/apache/hadoop/mapred/ResourcePolicy.java index e6b10ea..c2d4aff 100644 --- a/src/main/java/org/apache/hadoop/mapred/ResourcePolicy.java +++ b/src/main/java/org/apache/hadoop/mapred/ResourcePolicy.java @@ -260,6 +260,20 @@ public void resourceOffers(SchedulerDriver schedulerDriver, } } + // Verify the resource roles are what we need + if (scheduler.conf.getBoolean("mapred.mesos.role.strict", false)) { + String expectedRole = scheduler.conf.get("mapred.mesos.role", "*"); + if (!cpuRole.equals(expectedRole) || + !memRole.equals(expectedRole) || + !diskRole.equals(expectedRole) || + !portsRole.equals(expectedRole)) { + LOG.info("Declining offer with invalid role " + expectedRole); + + schedulerDriver.declineOffer(offer.getId()); + continue; + } + } + final boolean sufficient = computeSlots(); double taskCpus = (mapSlots + reduceSlots) * slotCpus + containerCpus;