YARN-10053. Use Shared Group Mapping Service in Placement Rules. Contributed by Wilfred Spiegelenburg.
(cherry picked from commit 217b56ffdd
)
This commit is contained in:
parent
8b748c0308
commit
807d7aa3af
|
@ -313,9 +313,9 @@ public class UserGroupMappingPlacementRule extends PlacementRule {
|
||||||
|
|
||||||
// initialize groups if mappings are present
|
// initialize groups if mappings are present
|
||||||
if (newMappings.size() > 0) {
|
if (newMappings.size() > 0) {
|
||||||
Groups groups = new Groups(conf);
|
|
||||||
this.mappings = newMappings;
|
this.mappings = newMappings;
|
||||||
this.groups = groups;
|
this.groups = Groups.getUserToGroupsMappingService(
|
||||||
|
((CapacityScheduler)scheduler).getConfig());
|
||||||
this.overrideWithQueueMappings = overrideWithQueueMappings;
|
this.overrideWithQueueMappings = overrideWithQueueMappings;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,7 +72,7 @@ public class QueuePlacementPolicy {
|
||||||
}
|
}
|
||||||
this.rules = rules;
|
this.rules = rules;
|
||||||
this.configuredQueues = configuredQueues;
|
this.configuredQueues = configuredQueues;
|
||||||
groups = new Groups(conf);
|
this.groups = Groups.getUserToGroupsMappingService(conf);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -47,6 +47,7 @@ import org.apache.hadoop.conf.Configuration;
|
||||||
import org.apache.hadoop.fs.CommonConfigurationKeys;
|
import org.apache.hadoop.fs.CommonConfigurationKeys;
|
||||||
import org.apache.hadoop.net.NetworkTopology;
|
import org.apache.hadoop.net.NetworkTopology;
|
||||||
import org.apache.hadoop.security.Credentials;
|
import org.apache.hadoop.security.Credentials;
|
||||||
|
import org.apache.hadoop.security.Groups;
|
||||||
import org.apache.hadoop.security.ShellBasedUnixGroupsMapping;
|
import org.apache.hadoop.security.ShellBasedUnixGroupsMapping;
|
||||||
import org.apache.hadoop.security.TestGroupsCaching;
|
import org.apache.hadoop.security.TestGroupsCaching;
|
||||||
import org.apache.hadoop.security.UserGroupInformation;
|
import org.apache.hadoop.security.UserGroupInformation;
|
||||||
|
@ -107,9 +108,6 @@ import org.apache.hadoop.yarn.server.resourcemanager.TestAMAuthorization.MockRMW
|
||||||
import org.apache.hadoop.yarn.server.resourcemanager.TestAMAuthorization.MyContainerManager;
|
import org.apache.hadoop.yarn.server.resourcemanager.TestAMAuthorization.MyContainerManager;
|
||||||
import org.apache.hadoop.yarn.server.resourcemanager.nodelabels.NullRMNodeLabelsManager;
|
import org.apache.hadoop.yarn.server.resourcemanager.nodelabels.NullRMNodeLabelsManager;
|
||||||
import org.apache.hadoop.yarn.server.resourcemanager.nodelabels.RMNodeLabelsManager;
|
import org.apache.hadoop.yarn.server.resourcemanager.nodelabels.RMNodeLabelsManager;
|
||||||
|
|
||||||
import org.apache.hadoop.yarn.server.resourcemanager.placement
|
|
||||||
.UserGroupMappingPlacementRule;
|
|
||||||
import org.apache.hadoop.yarn.server.resourcemanager.resource.TestResourceProfiles;
|
import org.apache.hadoop.yarn.server.resourcemanager.resource.TestResourceProfiles;
|
||||||
import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMApp;
|
import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMApp;
|
||||||
import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMAppImpl;
|
import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMAppImpl;
|
||||||
|
@ -4821,6 +4819,7 @@ public class TestCapacityScheduler extends CapacitySchedulerTestBase {
|
||||||
"a1" +"=" + "agroup" + "");
|
"a1" +"=" + "agroup" + "");
|
||||||
config.set(CapacitySchedulerConfiguration.QUEUE_MAPPING,
|
config.set(CapacitySchedulerConfiguration.QUEUE_MAPPING,
|
||||||
"g:agroup:%user");
|
"g:agroup:%user");
|
||||||
|
Groups.getUserToGroupsMappingServiceWithLoadedConfiguration(config);
|
||||||
|
|
||||||
MockRM rm = new MockRM(config);
|
MockRM rm = new MockRM(config);
|
||||||
rm.start();
|
rm.start();
|
||||||
|
|
|
@ -23,7 +23,7 @@ import org.apache.commons.lang.math.RandomUtils;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
import org.apache.hadoop.fs.CommonConfigurationKeys;
|
import org.apache.hadoop.fs.CommonConfigurationKeys;
|
||||||
import org.apache.hadoop.security.GroupMappingServiceProvider;
|
import org.apache.hadoop.security.Groups;
|
||||||
import org.apache.hadoop.security.ShellBasedUnixGroupsMapping;
|
import org.apache.hadoop.security.ShellBasedUnixGroupsMapping;
|
||||||
import org.apache.hadoop.security.TestGroupsCaching;
|
import org.apache.hadoop.security.TestGroupsCaching;
|
||||||
import org.apache.hadoop.yarn.api.records.ApplicationAttemptId;
|
import org.apache.hadoop.yarn.api.records.ApplicationAttemptId;
|
||||||
|
@ -63,8 +63,6 @@ import org.apache.hadoop.yarn.server.resourcemanager.scheduler.event
|
||||||
.AppAttemptAddedSchedulerEvent;
|
.AppAttemptAddedSchedulerEvent;
|
||||||
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.event
|
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.event
|
||||||
.SchedulerEvent;
|
.SchedulerEvent;
|
||||||
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair
|
|
||||||
.SimpleGroupsMapping;
|
|
||||||
import org.apache.hadoop.yarn.server.utils.BuilderUtils;
|
import org.apache.hadoop.yarn.server.utils.BuilderUtils;
|
||||||
import org.apache.hadoop.yarn.util.Records;
|
import org.apache.hadoop.yarn.util.Records;
|
||||||
import org.apache.hadoop.yarn.util.YarnVersionInfo;
|
import org.apache.hadoop.yarn.util.YarnVersionInfo;
|
||||||
|
@ -296,6 +294,7 @@ public class TestCapacitySchedulerAutoCreatedQueueBase {
|
||||||
TestGroupsCaching.FakeunPrivilegedGroupMapping.class, ShellBasedUnixGroupsMapping.class);
|
TestGroupsCaching.FakeunPrivilegedGroupMapping.class, ShellBasedUnixGroupsMapping.class);
|
||||||
conf.set(CommonConfigurationKeys.HADOOP_USER_GROUP_STATIC_OVERRIDES,
|
conf.set(CommonConfigurationKeys.HADOOP_USER_GROUP_STATIC_OVERRIDES,
|
||||||
TEST_GROUPUSER +"=" + TEST_GROUP + ";invalid_user=invalid_group");
|
TEST_GROUPUSER +"=" + TEST_GROUP + ";invalid_user=invalid_group");
|
||||||
|
Groups.getUserToGroupsMappingServiceWithLoadedConfiguration(conf);
|
||||||
|
|
||||||
UserGroupMappingPlacementRule.QueueMapping userQueueMapping =
|
UserGroupMappingPlacementRule.QueueMapping userQueueMapping =
|
||||||
new UserGroupMappingPlacementRule.QueueMapping(
|
new UserGroupMappingPlacementRule.QueueMapping(
|
||||||
|
|
|
@ -51,6 +51,8 @@ import org.apache.hadoop.metrics2.impl.MetricsCollectorImpl;
|
||||||
import org.apache.hadoop.metrics2.lib.DefaultMetricsSystem;
|
import org.apache.hadoop.metrics2.lib.DefaultMetricsSystem;
|
||||||
import org.apache.hadoop.net.NetworkTopology;
|
import org.apache.hadoop.net.NetworkTopology;
|
||||||
import org.apache.hadoop.security.GroupMappingServiceProvider;
|
import org.apache.hadoop.security.GroupMappingServiceProvider;
|
||||||
|
import org.apache.hadoop.security.Groups;
|
||||||
|
import org.apache.hadoop.security.JniBasedUnixGroupsMappingWithFallback;
|
||||||
import org.apache.hadoop.yarn.MockApps;
|
import org.apache.hadoop.yarn.MockApps;
|
||||||
import org.apache.hadoop.yarn.api.records.ApplicationAttemptId;
|
import org.apache.hadoop.yarn.api.records.ApplicationAttemptId;
|
||||||
import org.apache.hadoop.yarn.api.records.ApplicationId;
|
import org.apache.hadoop.yarn.api.records.ApplicationId;
|
||||||
|
@ -1806,6 +1808,7 @@ public class TestFairScheduler extends FairSchedulerTestBase {
|
||||||
public void testQueuePlacementWithPolicy() throws Exception {
|
public void testQueuePlacementWithPolicy() throws Exception {
|
||||||
conf.setClass(CommonConfigurationKeys.HADOOP_SECURITY_GROUP_MAPPING,
|
conf.setClass(CommonConfigurationKeys.HADOOP_SECURITY_GROUP_MAPPING,
|
||||||
SimpleGroupsMapping.class, GroupMappingServiceProvider.class);
|
SimpleGroupsMapping.class, GroupMappingServiceProvider.class);
|
||||||
|
Groups.getUserToGroupsMappingServiceWithLoadedConfiguration(conf);
|
||||||
scheduler.init(conf);
|
scheduler.init(conf);
|
||||||
scheduler.start();
|
scheduler.start();
|
||||||
scheduler.reinitialize(conf, resourceManager.getRMContext());
|
scheduler.reinitialize(conf, resourceManager.getRMContext());
|
||||||
|
@ -1851,6 +1854,12 @@ public class TestFairScheduler extends FairSchedulerTestBase {
|
||||||
assertEquals("root.somequeue", scheduler.getSchedulerApp(appId).getQueueName());
|
assertEquals("root.somequeue", scheduler.getSchedulerApp(appId).getQueueName());
|
||||||
appId = createSchedulingRequest(1024, "default", "otheruser");
|
appId = createSchedulingRequest(1024, "default", "otheruser");
|
||||||
assertEquals("root.default", scheduler.getSchedulerApp(appId).getQueueName());
|
assertEquals("root.default", scheduler.getSchedulerApp(appId).getQueueName());
|
||||||
|
|
||||||
|
// undo the group change
|
||||||
|
conf.setClass(CommonConfigurationKeys.HADOOP_SECURITY_GROUP_MAPPING,
|
||||||
|
JniBasedUnixGroupsMappingWithFallback.class,
|
||||||
|
GroupMappingServiceProvider.class);
|
||||||
|
Groups.getUserToGroupsMappingServiceWithLoadedConfiguration(conf);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -1903,6 +1912,7 @@ public class TestFairScheduler extends FairSchedulerTestBase {
|
||||||
conf.set(FairSchedulerConfiguration.ALLOCATION_FILE, ALLOC_FILE);
|
conf.set(FairSchedulerConfiguration.ALLOCATION_FILE, ALLOC_FILE);
|
||||||
conf.setClass(CommonConfigurationKeys.HADOOP_SECURITY_GROUP_MAPPING,
|
conf.setClass(CommonConfigurationKeys.HADOOP_SECURITY_GROUP_MAPPING,
|
||||||
SimpleGroupsMapping.class, GroupMappingServiceProvider.class);
|
SimpleGroupsMapping.class, GroupMappingServiceProvider.class);
|
||||||
|
Groups.getUserToGroupsMappingServiceWithLoadedConfiguration(conf);
|
||||||
PrintWriter out = new PrintWriter(new FileWriter(ALLOC_FILE));
|
PrintWriter out = new PrintWriter(new FileWriter(ALLOC_FILE));
|
||||||
out.println("<?xml version=\"1.0\"?>");
|
out.println("<?xml version=\"1.0\"?>");
|
||||||
out.println("<allocations>");
|
out.println("<allocations>");
|
||||||
|
@ -1928,6 +1938,11 @@ public class TestFairScheduler extends FairSchedulerTestBase {
|
||||||
"user1");
|
"user1");
|
||||||
|
|
||||||
assertEquals("root.user1group.user1", user1Leaf.getName());
|
assertEquals("root.user1group.user1", user1Leaf.getName());
|
||||||
|
// undo the group change
|
||||||
|
conf.setClass(CommonConfigurationKeys.HADOOP_SECURITY_GROUP_MAPPING,
|
||||||
|
JniBasedUnixGroupsMappingWithFallback.class,
|
||||||
|
GroupMappingServiceProvider.class);
|
||||||
|
Groups.getUserToGroupsMappingServiceWithLoadedConfiguration(conf);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
@ -20,10 +20,8 @@ package org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair;
|
||||||
import static org.junit.Assert.*;
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
@ -34,6 +32,7 @@ import org.apache.commons.io.IOUtils;
|
||||||
import org.apache.hadoop.conf.Configuration;
|
import org.apache.hadoop.conf.Configuration;
|
||||||
import org.apache.hadoop.fs.CommonConfigurationKeys;
|
import org.apache.hadoop.fs.CommonConfigurationKeys;
|
||||||
import org.apache.hadoop.security.GroupMappingServiceProvider;
|
import org.apache.hadoop.security.GroupMappingServiceProvider;
|
||||||
|
import org.apache.hadoop.security.Groups;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.BeforeClass;
|
import org.junit.BeforeClass;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
@ -389,8 +388,10 @@ public class TestQueuePlacementPolicy {
|
||||||
sb.append(" <rule name='default' />");
|
sb.append(" <rule name='default' />");
|
||||||
sb.append("</queuePlacementPolicy>");
|
sb.append("</queuePlacementPolicy>");
|
||||||
|
|
||||||
|
// change the group resolution
|
||||||
conf.setClass(CommonConfigurationKeys.HADOOP_SECURITY_GROUP_MAPPING,
|
conf.setClass(CommonConfigurationKeys.HADOOP_SECURITY_GROUP_MAPPING,
|
||||||
PeriodGroupsMapping.class, GroupMappingServiceProvider.class);
|
PeriodGroupsMapping.class, GroupMappingServiceProvider.class);
|
||||||
|
Groups.getUserToGroupsMappingServiceWithLoadedConfiguration(conf);
|
||||||
// User queue would be created under primary group queue, and the period
|
// User queue would be created under primary group queue, and the period
|
||||||
// in the group name should be converted into _dot_
|
// in the group name should be converted into _dot_
|
||||||
QueuePlacementPolicy policy = parse(sb.toString());
|
QueuePlacementPolicy policy = parse(sb.toString());
|
||||||
|
@ -399,6 +400,7 @@ public class TestQueuePlacementPolicy {
|
||||||
|
|
||||||
conf.setClass(CommonConfigurationKeys.HADOOP_SECURITY_GROUP_MAPPING,
|
conf.setClass(CommonConfigurationKeys.HADOOP_SECURITY_GROUP_MAPPING,
|
||||||
SimpleGroupsMapping.class, GroupMappingServiceProvider.class);
|
SimpleGroupsMapping.class, GroupMappingServiceProvider.class);
|
||||||
|
Groups.getUserToGroupsMappingServiceWithLoadedConfiguration(conf);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(expected=IOException.class)
|
@Test(expected=IOException.class)
|
||||||
|
@ -412,6 +414,7 @@ public class TestQueuePlacementPolicy {
|
||||||
// Add a static mapping that returns empty groups for users
|
// Add a static mapping that returns empty groups for users
|
||||||
conf.setStrings(CommonConfigurationKeys
|
conf.setStrings(CommonConfigurationKeys
|
||||||
.HADOOP_USER_GROUP_STATIC_OVERRIDES, "emptygroupuser=");
|
.HADOOP_USER_GROUP_STATIC_OVERRIDES, "emptygroupuser=");
|
||||||
|
Groups.getUserToGroupsMappingServiceWithLoadedConfiguration(conf);
|
||||||
QueuePlacementPolicy policy = parse(sb.toString());
|
QueuePlacementPolicy policy = parse(sb.toString());
|
||||||
policy.assignAppToQueue(null, "emptygroupuser");
|
policy.assignAppToQueue(null, "emptygroupuser");
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue