Merge MAPREDUCE-4306 from trunk. Fix distributed shell to work with users other than the one running the daemons. (Contributed by Ahmed Radwan)
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1351878 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
27bbcc4c5c
commit
3b61e3693f
|
@ -54,6 +54,9 @@ Release 2.0.1-alpha - UNRELEASED
|
||||||
MAPREDUCE-3873. Fixed NodeManagers' decommissioning at RM to accept IP
|
MAPREDUCE-3873. Fixed NodeManagers' decommissioning at RM to accept IP
|
||||||
addresses also. (xieguiming via vinodkv)
|
addresses also. (xieguiming via vinodkv)
|
||||||
|
|
||||||
|
MAPREDUCE-4306. Fix distributed shell to work with users other than the one
|
||||||
|
running the daemons. (Ahmed Radwan via sseth)
|
||||||
|
|
||||||
Release 2.0.0-alpha - 05-23-2012
|
Release 2.0.0-alpha - 05-23-2012
|
||||||
|
|
||||||
INCOMPATIBLE CHANGES
|
INCOMPATIBLE CHANGES
|
||||||
|
|
|
@ -44,7 +44,6 @@ import org.apache.hadoop.classification.InterfaceAudience;
|
||||||
import org.apache.hadoop.classification.InterfaceStability;
|
import org.apache.hadoop.classification.InterfaceStability;
|
||||||
import org.apache.hadoop.conf.Configuration;
|
import org.apache.hadoop.conf.Configuration;
|
||||||
import org.apache.hadoop.net.NetUtils;
|
import org.apache.hadoop.net.NetUtils;
|
||||||
import org.apache.hadoop.security.UserGroupInformation;
|
|
||||||
import org.apache.hadoop.yarn.api.AMRMProtocol;
|
import org.apache.hadoop.yarn.api.AMRMProtocol;
|
||||||
import org.apache.hadoop.yarn.api.ApplicationConstants;
|
import org.apache.hadoop.yarn.api.ApplicationConstants;
|
||||||
import org.apache.hadoop.yarn.api.ContainerManager;
|
import org.apache.hadoop.yarn.api.ContainerManager;
|
||||||
|
@ -635,12 +634,10 @@ public class ApplicationMaster {
|
||||||
ctx.setContainerId(container.getId());
|
ctx.setContainerId(container.getId());
|
||||||
ctx.setResource(container.getResource());
|
ctx.setResource(container.getResource());
|
||||||
|
|
||||||
try {
|
String jobUserName = System.getenv(ApplicationConstants.Environment.USER
|
||||||
ctx.setUser(UserGroupInformation.getCurrentUser().getShortUserName());
|
.name());
|
||||||
} catch (IOException e) {
|
ctx.setUser(jobUserName);
|
||||||
LOG.info("Getting current user info failed when trying to launch the container"
|
LOG.info("Setting user in ContainerLaunchContext to: " + jobUserName);
|
||||||
+ e.getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set the environment
|
// Set the environment
|
||||||
ctx.setEnvironment(shellEnv);
|
ctx.setEnvironment(shellEnv);
|
||||||
|
|
|
@ -95,7 +95,7 @@ import org.apache.hadoop.yarn.util.Records;
|
||||||
*
|
*
|
||||||
* <p> For the actual job submission, the client first has to create an {@link ApplicationSubmissionContext}.
|
* <p> For the actual job submission, the client first has to create an {@link ApplicationSubmissionContext}.
|
||||||
* The {@link ApplicationSubmissionContext} defines the application details such as {@link ApplicationId}
|
* The {@link ApplicationSubmissionContext} defines the application details such as {@link ApplicationId}
|
||||||
* and application name, user submitting the application, the priority assigned to the application and the queue
|
* and application name, the priority assigned to the application and the queue
|
||||||
* to which this application needs to be assigned. In addition to this, the {@link ApplicationSubmissionContext}
|
* to which this application needs to be assigned. In addition to this, the {@link ApplicationSubmissionContext}
|
||||||
* also defines the {@link ContainerLaunchContext} which describes the <code>Container</code> with which
|
* also defines the {@link ContainerLaunchContext} which describes the <code>Container</code> with which
|
||||||
* the {@link ApplicationMaster} is launched. </p>
|
* the {@link ApplicationMaster} is launched. </p>
|
||||||
|
@ -132,8 +132,6 @@ public class Client {
|
||||||
private int amPriority = 0;
|
private int amPriority = 0;
|
||||||
// Queue for App master
|
// Queue for App master
|
||||||
private String amQueue = "";
|
private String amQueue = "";
|
||||||
// User to run app master as
|
|
||||||
private String amUser = "";
|
|
||||||
// Amt. of memory resource to request for to run the App Master
|
// Amt. of memory resource to request for to run the App Master
|
||||||
private int amMemory = 10;
|
private int amMemory = 10;
|
||||||
|
|
||||||
|
@ -221,6 +219,7 @@ public class Client {
|
||||||
* Parse command line options
|
* Parse command line options
|
||||||
* @param args Parsed command line options
|
* @param args Parsed command line options
|
||||||
* @return Whether the init was successful to run the client
|
* @return Whether the init was successful to run the client
|
||||||
|
* @throws ParseException
|
||||||
*/
|
*/
|
||||||
public boolean init(String[] args) throws ParseException {
|
public boolean init(String[] args) throws ParseException {
|
||||||
|
|
||||||
|
@ -228,7 +227,6 @@ public class Client {
|
||||||
opts.addOption("appname", true, "Application Name. Default value - DistributedShell");
|
opts.addOption("appname", true, "Application Name. Default value - DistributedShell");
|
||||||
opts.addOption("priority", true, "Application Priority. Default 0");
|
opts.addOption("priority", true, "Application Priority. Default 0");
|
||||||
opts.addOption("queue", true, "RM Queue in which this application is to be submitted");
|
opts.addOption("queue", true, "RM Queue in which this application is to be submitted");
|
||||||
opts.addOption("user", true, "User to run the application as");
|
|
||||||
opts.addOption("timeout", true, "Application timeout in milliseconds");
|
opts.addOption("timeout", true, "Application timeout in milliseconds");
|
||||||
opts.addOption("master_memory", true, "Amount of memory in MB to be requested to run the application master");
|
opts.addOption("master_memory", true, "Amount of memory in MB to be requested to run the application master");
|
||||||
opts.addOption("jar", true, "Jar file containing the application master");
|
opts.addOption("jar", true, "Jar file containing the application master");
|
||||||
|
@ -263,7 +261,6 @@ public class Client {
|
||||||
appName = cliParser.getOptionValue("appname", "DistributedShell");
|
appName = cliParser.getOptionValue("appname", "DistributedShell");
|
||||||
amPriority = Integer.parseInt(cliParser.getOptionValue("priority", "0"));
|
amPriority = Integer.parseInt(cliParser.getOptionValue("priority", "0"));
|
||||||
amQueue = cliParser.getOptionValue("queue", "");
|
amQueue = cliParser.getOptionValue("queue", "");
|
||||||
amUser = cliParser.getOptionValue("user", "");
|
|
||||||
amMemory = Integer.parseInt(cliParser.getOptionValue("master_memory", "10"));
|
amMemory = Integer.parseInt(cliParser.getOptionValue("master_memory", "10"));
|
||||||
|
|
||||||
if (amMemory < 0) {
|
if (amMemory < 0) {
|
||||||
|
@ -567,10 +564,6 @@ public class Client {
|
||||||
commands.add(command.toString());
|
commands.add(command.toString());
|
||||||
amContainer.setCommands(commands);
|
amContainer.setCommands(commands);
|
||||||
|
|
||||||
// For launching an AM Container, setting user here is not needed
|
|
||||||
// Set user in ApplicationSubmissionContext
|
|
||||||
// amContainer.setUser(amUser);
|
|
||||||
|
|
||||||
// Set up resource type requirements
|
// Set up resource type requirements
|
||||||
// For now, only memory is supported so we set memory requirements
|
// For now, only memory is supported so we set memory requirements
|
||||||
Resource capability = Records.newRecord(Resource.class);
|
Resource capability = Records.newRecord(Resource.class);
|
||||||
|
@ -594,9 +587,6 @@ public class Client {
|
||||||
|
|
||||||
// Set the queue to which this application is to be submitted in the RM
|
// Set the queue to which this application is to be submitted in the RM
|
||||||
appContext.setQueue(amQueue);
|
appContext.setQueue(amQueue);
|
||||||
// Set the user submitting this application
|
|
||||||
// TODO can it be empty?
|
|
||||||
appContext.setUser(amUser);
|
|
||||||
|
|
||||||
// Create the request to send to the applications manager
|
// Create the request to send to the applications manager
|
||||||
SubmitApplicationRequest appRequest = Records.newRecord(SubmitApplicationRequest.class);
|
SubmitApplicationRequest appRequest = Records.newRecord(SubmitApplicationRequest.class);
|
||||||
|
|
Loading…
Reference in New Issue