YARN-8076. Support to specify application tags in distributed shell. Contributed by Weiwei Yang.
(cherry picked from commit 431076f63751f855ab6036ff85825a8552257b93)
(cherry picked from commit 04161bad789fc4d970b9f537803806d4ba02a791)
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-distributedshell/src/main/java/org/apache/hadoop/yarn/applications/distributedshell/Client.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-distributedshell/src/main/java/org/apache/hadoop/yarn/applications/distributedshell/Client.java
index d6a753a..61879d0 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-distributedshell/src/main/java/org/apache/hadoop/yarn/applications/distributedshell/Client.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-distributedshell/src/main/java/org/apache/hadoop/yarn/applications/distributedshell/Client.java
@@ -230,6 +230,9 @@
// Docker client configuration
private String dockerClientConfig = null;
+ // Application tags
+ private Set<String> applicationTags = new HashSet<>();
+
// Command line options
private Options opts;
@@ -384,6 +387,7 @@
"Placement specification. Please note, if this option is specified,"
+ " The \"num_containers\" option will be ignored. All requested"
+ " containers will be of type GUARANTEED" );
+ opts.addOption("application_tags", true, "Application tags.");
}
/**
@@ -604,6 +608,14 @@
if (cliParser.hasOption("docker_client_config")) {
dockerClientConfig = cliParser.getOptionValue("docker_client_config");
}
+
+ if (cliParser.hasOption("application_tags")) {
+ String applicationTagsStr = cliParser.getOptionValue("application_tags");
+ String[] appTags = applicationTagsStr.split(",");
+ for (String appTag : appTags) {
+ this.applicationTags.add(appTag.trim());
+ }
+ }
return true;
}
@@ -729,6 +741,9 @@
}
Set<String> tags = new HashSet<String>();
+ if (applicationTags != null) {
+ tags.addAll(applicationTags);
+ }
if (flowName != null) {
tags.add(TimelineUtils.generateFlowNameTag(flowName));
}