Skip to content

Commit a0da1ec

Browse files
YARN-3948. Display Application Priority in RM Web UI.(Sunil G via rohithsharmaks)
(cherry picked from commit b6265d3)
1 parent 42a05d2 commit a0da1ec

File tree

15 files changed

+116
-21
lines changed

15 files changed

+116
-21
lines changed

hadoop-yarn-project/CHANGES.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,8 @@ Release 2.8.0 - UNRELEASED
104104
YARN-3736. Add RMStateStore apis to store and load accepted reservations for
105105
failover (adhoot via asuresh)
106106

107+
YARN-3948. Display Application Priority in RM Web UI.(Sunil G via rohithsharmaks)
108+
107109
IMPROVEMENTS
108110

109111
YARN-644. Basic null check is not performed on passed in arguments before

hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ApplicationReport.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -408,4 +408,17 @@ public abstract void setLogAggregationStatus(
408408
@Public
409409
@Unstable
410410
public abstract void setUnmanagedApp(boolean unmanagedApplication);
411+
412+
/**
413+
* Get priority of the application
414+
*
415+
* @return Application's priority
416+
*/
417+
@Public
418+
@Stable
419+
public abstract Priority getPriority();
420+
421+
@Private
422+
@Unstable
423+
public abstract void setPriority(Priority priority);
411424
}

hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_protos.proto

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,7 @@ message ApplicationReportProto {
196196
repeated string applicationTags = 20;
197197
optional LogAggregationStatusProto log_aggregation_status = 21;
198198
optional bool unmanaged_application = 22 [default = false];
199+
optional PriorityProto priority = 23;
199200
}
200201

201202
enum LogAggregationStatusProto {

hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/ApplicationCLI.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -501,6 +501,8 @@ private int printApplicationReport(String applicationId)
501501
appReportStr.println(appReport.getUser());
502502
appReportStr.print("\tQueue : ");
503503
appReportStr.println(appReport.getQueue());
504+
appReportStr.print("\tApplication Priority : ");
505+
appReportStr.println(appReport.getPriority());
504506
appReportStr.print("\tStart-Time : ");
505507
appReportStr.println(appReport.getStartTime());
506508
appReportStr.print("\tFinish-Time : ");

hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestYarnCLI.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ public void testGetApplicationReport() throws Exception {
106106
FinalApplicationStatus.SUCCEEDED, usageReport, "N/A", 0.53789f, "YARN",
107107
null, null, false);
108108
newApplicationReport.setLogAggregationStatus(LogAggregationStatus.SUCCEEDED);
109+
newApplicationReport.setPriority(Priority.newInstance(0));
109110
when(client.getApplicationReport(any(ApplicationId.class))).thenReturn(
110111
newApplicationReport);
111112
int result = cli.run(new String[] { "application", "-status", applicationId.toString() });
@@ -119,6 +120,7 @@ public void testGetApplicationReport() throws Exception {
119120
pw.println("\tApplication-Type : YARN");
120121
pw.println("\tUser : user");
121122
pw.println("\tQueue : queue");
123+
pw.println("\tApplication Priority : 0");
122124
pw.println("\tStart-Time : 0");
123125
pw.println("\tFinish-Time : 0");
124126
pw.println("\tProgress : 53.79%");

hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ApplicationReportPBImpl.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.apache.hadoop.yarn.api.records.ApplicationResourceUsageReport;
2828
import org.apache.hadoop.yarn.api.records.FinalApplicationStatus;
2929
import org.apache.hadoop.yarn.api.records.LogAggregationStatus;
30+
import org.apache.hadoop.yarn.api.records.Priority;
3031
import org.apache.hadoop.yarn.api.records.Token;
3132
import org.apache.hadoop.yarn.api.records.YarnApplicationState;
3233
import org.apache.hadoop.yarn.proto.YarnProtos.ApplicationAttemptIdProto;
@@ -36,6 +37,7 @@
3637
import org.apache.hadoop.yarn.proto.YarnProtos.ApplicationResourceUsageReportProto;
3738
import org.apache.hadoop.yarn.proto.YarnProtos.FinalApplicationStatusProto;
3839
import org.apache.hadoop.yarn.proto.YarnProtos.LogAggregationStatusProto;
40+
import org.apache.hadoop.yarn.proto.YarnProtos.PriorityProto;
3941
import org.apache.hadoop.yarn.proto.YarnProtos.YarnApplicationStateProto;
4042

4143
import com.google.protobuf.TextFormat;
@@ -55,6 +57,7 @@ public class ApplicationReportPBImpl extends ApplicationReport {
5557
private Token clientToAMToken = null;
5658
private Token amRmToken = null;
5759
private Set<String> applicationTags = null;
60+
private Priority priority = null;
5861

5962
public ApplicationReportPBImpl() {
6063
builder = ApplicationReportProto.newBuilder();
@@ -484,6 +487,11 @@ private void mergeLocalToBuilder() {
484487
builder.clearApplicationTags();
485488
builder.addAllApplicationTags(this.applicationTags);
486489
}
490+
if (this.priority != null
491+
&& !((PriorityPBImpl) this.priority).getProto().equals(
492+
builder.getPriority())) {
493+
builder.setPriority(convertToProtoFormat(this.priority));
494+
}
487495
}
488496

489497
private void mergeLocalToProto() {
@@ -551,6 +559,14 @@ private TokenProto convertToProtoFormat(Token t) {
551559
return ((TokenPBImpl)t).getProto();
552560
}
553561

562+
private PriorityPBImpl convertFromProtoFormat(PriorityProto p) {
563+
return new PriorityPBImpl(p);
564+
}
565+
566+
private PriorityProto convertToProtoFormat(Priority t) {
567+
return ((PriorityPBImpl)t).getProto();
568+
}
569+
554570
@Override
555571
public LogAggregationStatus getLogAggregationStatus() {
556572
ApplicationReportProtoOrBuilder p = viaProto ? proto : builder;
@@ -593,4 +609,25 @@ public void setUnmanagedApp(boolean unmanagedApplication) {
593609
maybeInitBuilder();
594610
builder.setUnmanagedApplication(unmanagedApplication);
595611
}
612+
613+
@Override
614+
public Priority getPriority() {
615+
ApplicationReportProtoOrBuilder p = viaProto ? proto : builder;
616+
if (this.priority != null) {
617+
return this.priority;
618+
}
619+
if (!p.hasPriority()) {
620+
return null;
621+
}
622+
this.priority = convertFromProtoFormat(p.getPriority());
623+
return this.priority;
624+
}
625+
626+
@Override
627+
public void setPriority(Priority priority) {
628+
maybeInitBuilder();
629+
if (priority == null)
630+
builder.clearPriority();
631+
this.priority = priority;
632+
}
596633
}

hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/utils/BuilderUtils.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,8 @@ public static ApplicationReport newApplicationReport(
324324
String url, long startTime, long finishTime,
325325
FinalApplicationStatus finalStatus,
326326
ApplicationResourceUsageReport appResources, String origTrackingUrl,
327-
float progress, String appType, Token amRmToken, Set<String> tags) {
327+
float progress, String appType, Token amRmToken, Set<String> tags,
328+
Priority priority) {
328329
ApplicationReport report = recordFactory
329330
.newRecordInstance(ApplicationReport.class);
330331
report.setApplicationId(applicationId);
@@ -347,6 +348,7 @@ public static ApplicationReport newApplicationReport(
347348
report.setApplicationType(appType);
348349
report.setAMRMToken(amRmToken);
349350
report.setApplicationTags(tags);
351+
report.setPriority(priority);
350352
return report;
351353
}
352354

hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/webapp/AppBlock.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@ public ApplicationReport run() throws Exception {
167167
._("Application Type:", app.getType())
168168
._("Application Tags:",
169169
app.getApplicationTags() == null ? "" : app.getApplicationTags())
170+
._("Application Priority:", clarifyAppPriority(app.getPriority()))
170171
._(
171172
"YarnApplicationState:",
172173
app.getAppState() == null ? UNAVAILABLE : clarifyAppState(app
@@ -342,6 +343,10 @@ private String clarifyAppState(YarnApplicationState state) {
342343
}
343344
}
344345

346+
private String clarifyAppPriority(int priority) {
347+
return priority + " (Higher Integer value indicates higher priority)";
348+
}
349+
345350
private String clairfyAppFinalStatus(FinalApplicationStatus status) {
346351
if (status == FinalApplicationStatus.UNDEFINED) {
347352
return "Application has not completed yet.";

hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/webapp/WebPageUtils.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,13 @@ private static String getAppsTableColumnDefs(
5252
.append("{'sType':'string', 'aTargets': [0]")
5353
.append(", 'mRender': parseHadoopID }")
5454
.append("\n, {'sType':'numeric', 'aTargets': " +
55-
(isFairSchedulerPage ? "[6, 7]": "[5, 6]"))
55+
(isFairSchedulerPage ? "[6, 7]": "[6, 7]"))
5656
.append(", 'mRender': renderHadoopDate }")
5757
.append("\n, {'sType':'numeric', bSearchable:false, 'aTargets':");
5858
if (isFairSchedulerPage) {
5959
sb.append("[13]");
6060
} else if (isResourceManager) {
61-
sb.append("[12]");
61+
sb.append("[13]");
6262
} else {
6363
sb.append("[9]");
6464
}

hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/webapp/dao/AppInfo.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ public class AppInfo {
5858
protected long finishedTime;
5959
protected long elapsedTime;
6060
protected String applicationTags;
61+
protected int priority;
6162
private int allocatedCpuVcores;
6263
private int allocatedMemoryMB;
6364
protected boolean unmanagedApplication;
@@ -86,6 +87,10 @@ public AppInfo(ApplicationReport app) {
8687
finishedTime = app.getFinishTime();
8788
elapsedTime = Times.elapsed(startedTime, finishedTime);
8889
finalAppStatus = app.getFinalApplicationStatus();
90+
priority = 0;
91+
if (app.getPriority() != null) {
92+
priority = app.getPriority().getPriority();
93+
}
8994
if (app.getApplicationResourceUsageReport() != null) {
9095
runningContainers = app.getApplicationResourceUsageReport()
9196
.getNumUsedContainers();
@@ -194,4 +199,8 @@ public String getApplicationTags() {
194199
public boolean isUnmanagedApp() {
195200
return unmanagedApplication;
196201
}
202+
203+
public int getPriority() {
204+
return priority;
205+
}
197206
}

0 commit comments

Comments
 (0)