YARN-3543. ApplicationReport should be able to tell whether the

Application is AM managed or not. Contributed by Rohith Sharma K S

(cherry picked from commit 0306d902f5)
This commit is contained in:
Xuan 2015-08-03 15:46:00 -07:00
parent b264217bc3
commit 8126fde884
21 changed files with 136 additions and 25 deletions

View File

@ -311,6 +311,9 @@ Release 2.8.0 - UNRELEASED
YARN-3965. Add startup timestamp to nodemanager UI (Hong Zhiguo via jlowe) YARN-3965. Add startup timestamp to nodemanager UI (Hong Zhiguo via jlowe)
YARN-3543. ApplicationReport should be able to tell whether the Application
is AM managed or not. (Rohith Sharma K S via xgong)
OPTIMIZATIONS OPTIMIZATIONS
YARN-3339. TestDockerContainerExecutor should pull a single image and not YARN-3339. TestDockerContainerExecutor should pull a single image and not

View File

@ -92,13 +92,14 @@ public abstract class ApplicationReport {
long startTime, long finishTime, FinalApplicationStatus finalStatus, long startTime, long finishTime, FinalApplicationStatus finalStatus,
ApplicationResourceUsageReport appResources, String origTrackingUrl, ApplicationResourceUsageReport appResources, String origTrackingUrl,
float progress, String applicationType, Token amRmToken, float progress, String applicationType, Token amRmToken,
Set<String> tags) { Set<String> tags, boolean unmanagedApplication) {
ApplicationReport report = ApplicationReport report =
newInstance(applicationId, applicationAttemptId, user, queue, name, newInstance(applicationId, applicationAttemptId, user, queue, name,
host, rpcPort, clientToAMToken, state, diagnostics, url, startTime, host, rpcPort, clientToAMToken, state, diagnostics, url, startTime,
finishTime, finalStatus, appResources, origTrackingUrl, progress, finishTime, finalStatus, appResources, origTrackingUrl, progress,
applicationType, amRmToken); applicationType, amRmToken);
report.setApplicationTags(tags); report.setApplicationTags(tags);
report.setUnmanagedApp(unmanagedApplication);
return report; return report;
} }
@ -393,4 +394,18 @@ public abstract class ApplicationReport {
@Unstable @Unstable
public abstract void setLogAggregationStatus( public abstract void setLogAggregationStatus(
LogAggregationStatus logAggregationStatus); LogAggregationStatus logAggregationStatus);
/**
* @return true if the AM is not managed by the RM
*/
@Public
@Unstable
public abstract boolean isUnmanagedApp();
/**
* @param value true if RM should not manage the AM
*/
@Public
@Unstable
public abstract void setUnmanagedApp(boolean unmanagedApplication);
} }

View File

@ -195,6 +195,7 @@ message ApplicationReportProto {
optional hadoop.common.TokenProto am_rm_token = 19; optional hadoop.common.TokenProto am_rm_token = 19;
repeated string applicationTags = 20; repeated string applicationTags = 20;
optional LogAggregationStatusProto log_aggregation_status = 21; optional LogAggregationStatusProto log_aggregation_status = 21;
optional bool unmanaged_application = 22 [default = false];
} }
enum LogAggregationStatusProto { enum LogAggregationStatusProto {

View File

@ -534,7 +534,9 @@ public class ApplicationCLI extends YarnCLI {
appReportStr.println(appReport.getLogAggregationStatus() == null ? "N/A" appReportStr.println(appReport.getLogAggregationStatus() == null ? "N/A"
: appReport.getLogAggregationStatus()); : appReport.getLogAggregationStatus());
appReportStr.print("\tDiagnostics : "); appReportStr.print("\tDiagnostics : ");
appReportStr.print(appReport.getDiagnostics()); appReportStr.println(appReport.getDiagnostics());
appReportStr.print("\tUnmanaged Application : ");
appReportStr.print(appReport.isUnmanagedApp());
} else { } else {
appReportStr.print("Application with id '" + applicationId appReportStr.print("Application with id '" + applicationId
+ "' doesn't exist in RM."); + "' doesn't exist in RM.");

View File

@ -895,12 +895,12 @@ public class TestYarnClient {
rmClient.start(); rmClient.start();
ApplicationId appId = createApp(rmClient, false); ApplicationId appId = createApp(rmClient, false);
waitTillAccepted(rmClient, appId); waitTillAccepted(rmClient, appId, false);
//managed AMs don't return AMRM token //managed AMs don't return AMRM token
Assert.assertNull(rmClient.getAMRMToken(appId)); Assert.assertNull(rmClient.getAMRMToken(appId));
appId = createApp(rmClient, true); appId = createApp(rmClient, true);
waitTillAccepted(rmClient, appId); waitTillAccepted(rmClient, appId, true);
long start = System.currentTimeMillis(); long start = System.currentTimeMillis();
while (rmClient.getAMRMToken(appId) == null) { while (rmClient.getAMRMToken(appId) == null) {
if (System.currentTimeMillis() - start > 20 * 1000) { if (System.currentTimeMillis() - start > 20 * 1000) {
@ -921,7 +921,7 @@ public class TestYarnClient {
rmClient.init(yarnConf); rmClient.init(yarnConf);
rmClient.start(); rmClient.start();
ApplicationId appId = createApp(rmClient, true); ApplicationId appId = createApp(rmClient, true);
waitTillAccepted(rmClient, appId); waitTillAccepted(rmClient, appId, true);
long start = System.currentTimeMillis(); long start = System.currentTimeMillis();
while (rmClient.getAMRMToken(appId) == null) { while (rmClient.getAMRMToken(appId) == null) {
if (System.currentTimeMillis() - start > 20 * 1000) { if (System.currentTimeMillis() - start > 20 * 1000) {
@ -981,7 +981,8 @@ public class TestYarnClient {
return appId; return appId;
} }
private void waitTillAccepted(YarnClient rmClient, ApplicationId appId) private void waitTillAccepted(YarnClient rmClient, ApplicationId appId,
boolean unmanagedApplication)
throws Exception { throws Exception {
try { try {
long start = System.currentTimeMillis(); long start = System.currentTimeMillis();
@ -994,6 +995,7 @@ public class TestYarnClient {
Thread.sleep(200); Thread.sleep(200);
report = rmClient.getApplicationReport(appId); report = rmClient.getApplicationReport(appId);
} }
Assert.assertEquals(unmanagedApplication, report.isUnmanagedApp());
} catch (Exception ex) { } catch (Exception ex) {
throw new Exception(ex); throw new Exception(ex);
} }

View File

@ -104,7 +104,7 @@ public class TestYarnCLI {
"user", "queue", "appname", "host", 124, null, "user", "queue", "appname", "host", 124, null,
YarnApplicationState.FINISHED, "diagnostics", "url", 0, 0, YarnApplicationState.FINISHED, "diagnostics", "url", 0, 0,
FinalApplicationStatus.SUCCEEDED, usageReport, "N/A", 0.53789f, "YARN", FinalApplicationStatus.SUCCEEDED, usageReport, "N/A", 0.53789f, "YARN",
null); null, null, false);
newApplicationReport.setLogAggregationStatus(LogAggregationStatus.SUCCEEDED); newApplicationReport.setLogAggregationStatus(LogAggregationStatus.SUCCEEDED);
when(client.getApplicationReport(any(ApplicationId.class))).thenReturn( when(client.getApplicationReport(any(ApplicationId.class))).thenReturn(
newApplicationReport); newApplicationReport);
@ -131,6 +131,7 @@ public class TestYarnCLI {
(i == 0 ? "N/A" : "123456 MB-seconds, 4567 vcore-seconds")); (i == 0 ? "N/A" : "123456 MB-seconds, 4567 vcore-seconds"));
pw.println("\tLog Aggregation Status : SUCCEEDED"); pw.println("\tLog Aggregation Status : SUCCEEDED");
pw.println("\tDiagnostics : diagnostics"); pw.println("\tDiagnostics : diagnostics");
pw.println("\tUnmanaged Application : false");
pw.close(); pw.close();
String appReportStr = baos.toString("UTF-8"); String appReportStr = baos.toString("UTF-8");
Assert.assertEquals(appReportStr, sysOutStream.toString()); Assert.assertEquals(appReportStr, sysOutStream.toString());

View File

@ -581,4 +581,16 @@ public class ApplicationReportPBImpl extends ApplicationReport {
convertToProtoFormat(LogAggregationStatus s) { convertToProtoFormat(LogAggregationStatus s) {
return ProtoUtils.convertToProtoFormat(s); return ProtoUtils.convertToProtoFormat(s);
} }
@Override
public boolean isUnmanagedApp() {
ApplicationReportProtoOrBuilder p = viaProto ? proto : builder;
return p.getUnmanagedApplication();
}
@Override
public void setUnmanagedApp(boolean unmanagedApplication) {
maybeInitBuilder();
builder.setUnmanagedApplication(unmanagedApplication);
}
} }

View File

@ -58,7 +58,8 @@ public class TestApplicatonReport {
ApplicationReport.newInstance(appId, appAttemptId, "user", "queue", ApplicationReport.newInstance(appId, appAttemptId, "user", "queue",
"appname", "host", 124, null, YarnApplicationState.FINISHED, "appname", "host", 124, null, YarnApplicationState.FINISHED,
"diagnostics", "url", 0, 0, FinalApplicationStatus.SUCCEEDED, null, "diagnostics", "url", 0, 0, FinalApplicationStatus.SUCCEEDED, null,
"N/A", 0.53789f, YarnConfiguration.DEFAULT_APPLICATION_TYPE, null); "N/A", 0.53789f, YarnConfiguration.DEFAULT_APPLICATION_TYPE, null,
null,false);
return appReport; return appReport;
} }

View File

@ -247,6 +247,7 @@ public class ApplicationHistoryManagerOnTimelineStore extends AbstractService
String queue = null; String queue = null;
String name = null; String name = null;
String type = null; String type = null;
boolean unmanagedApplication = false;
long createdTime = 0; long createdTime = 0;
long finishedTime = 0; long finishedTime = 0;
float progress = 0.0f; float progress = 0.0f;
@ -277,7 +278,8 @@ public class ApplicationHistoryManagerOnTimelineStore extends AbstractService
ConverterUtils.toApplicationId(entity.getEntityId()), ConverterUtils.toApplicationId(entity.getEntityId()),
latestApplicationAttemptId, user, queue, name, null, -1, null, state, latestApplicationAttemptId, user, queue, name, null, -1, null, state,
diagnosticsInfo, null, createdTime, finishedTime, finalStatus, null, diagnosticsInfo, null, createdTime, finishedTime, finalStatus, null,
null, progress, type, null, appTags), appViewACLs); null, progress, type, null, appTags,
unmanagedApplication), appViewACLs);
} }
if (entityInfo.containsKey(ApplicationMetricsConstants.QUEUE_ENTITY_INFO)) { if (entityInfo.containsKey(ApplicationMetricsConstants.QUEUE_ENTITY_INFO)) {
queue = queue =
@ -294,6 +296,13 @@ public class ApplicationHistoryManagerOnTimelineStore extends AbstractService
entityInfo.get(ApplicationMetricsConstants.TYPE_ENTITY_INFO) entityInfo.get(ApplicationMetricsConstants.TYPE_ENTITY_INFO)
.toString(); .toString();
} }
if (entityInfo
.containsKey(ApplicationMetricsConstants.UNMANAGED_APPLICATION_ENTITY_INFO)) {
unmanagedApplication =
Boolean.parseBoolean(entityInfo.get(
ApplicationMetricsConstants.UNMANAGED_APPLICATION_ENTITY_INFO)
.toString());
}
if (entityInfo.containsKey(ApplicationMetricsConstants.APP_CPU_METRICS)) { if (entityInfo.containsKey(ApplicationMetricsConstants.APP_CPU_METRICS)) {
long vcoreSeconds=Long.parseLong(entityInfo.get( long vcoreSeconds=Long.parseLong(entityInfo.get(
ApplicationMetricsConstants.APP_CPU_METRICS).toString()); ApplicationMetricsConstants.APP_CPU_METRICS).toString());
@ -365,7 +374,7 @@ public class ApplicationHistoryManagerOnTimelineStore extends AbstractService
ConverterUtils.toApplicationId(entity.getEntityId()), ConverterUtils.toApplicationId(entity.getEntityId()),
latestApplicationAttemptId, user, queue, name, null, -1, null, state, latestApplicationAttemptId, user, queue, name, null, -1, null, state,
diagnosticsInfo, null, createdTime, finishedTime, finalStatus, appResources, diagnosticsInfo, null, createdTime, finishedTime, finalStatus, appResources,
null, progress, type, null, appTags), appViewACLs); null, progress, type, null, appTags, unmanagedApplication), appViewACLs);
} }
private static ApplicationAttemptReport convertToApplicationAttemptReport( private static ApplicationAttemptReport convertToApplicationAttemptReport(

View File

@ -475,6 +475,8 @@ public class TestApplicationHistoryManagerOnTimelineStore {
"test app type"); "test app type");
entityInfo.put(ApplicationMetricsConstants.USER_ENTITY_INFO, "user1"); entityInfo.put(ApplicationMetricsConstants.USER_ENTITY_INFO, "user1");
entityInfo.put(ApplicationMetricsConstants.QUEUE_ENTITY_INFO, "test queue"); entityInfo.put(ApplicationMetricsConstants.QUEUE_ENTITY_INFO, "test queue");
entityInfo.put(
ApplicationMetricsConstants.UNMANAGED_APPLICATION_ENTITY_INFO, "false");
entityInfo.put(ApplicationMetricsConstants.SUBMITTED_TIME_ENTITY_INFO, entityInfo.put(ApplicationMetricsConstants.SUBMITTED_TIME_ENTITY_INFO,
Integer.MAX_VALUE + 1L); Integer.MAX_VALUE + 1L);
entityInfo.put(ApplicationMetricsConstants.APP_MEM_METRICS,123); entityInfo.put(ApplicationMetricsConstants.APP_MEM_METRICS,123);

View File

@ -74,4 +74,7 @@ public class ApplicationMetricsConstants {
"YARN_APPLICATION_LATEST_APP_ATTEMPT"; "YARN_APPLICATION_LATEST_APP_ATTEMPT";
public static final String APP_TAGS_INFO = "YARN_APPLICATION_TAGS"; public static final String APP_TAGS_INFO = "YARN_APPLICATION_TAGS";
public static final String UNMANAGED_APPLICATION_ENTITY_INFO =
"YARN_APPLICATION_UNMANAGED_APPLICATION";
} }

View File

@ -206,6 +206,7 @@ public class AppBlock extends HtmlBlock {
} }
overviewTable._("Diagnostics:", overviewTable._("Diagnostics:",
app.getDiagnosticsInfo() == null ? "" : app.getDiagnosticsInfo()); app.getDiagnosticsInfo() == null ? "" : app.getDiagnosticsInfo());
overviewTable._("Unmanaged Application:", app.isUnmanagedApp());
Collection<ApplicationAttemptReport> attempts; Collection<ApplicationAttemptReport> attempts;
try { try {

View File

@ -60,6 +60,7 @@ public class AppInfo {
protected String applicationTags; protected String applicationTags;
private int allocatedCpuVcores; private int allocatedCpuVcores;
private int allocatedMemoryMB; private int allocatedMemoryMB;
protected boolean unmanagedApplication;
public AppInfo() { public AppInfo() {
// JAXB needs this // JAXB needs this
@ -99,6 +100,7 @@ public class AppInfo {
if (app.getApplicationTags() != null && !app.getApplicationTags().isEmpty()) { if (app.getApplicationTags() != null && !app.getApplicationTags().isEmpty()) {
this.applicationTags = CSV_JOINER.join(app.getApplicationTags()); this.applicationTags = CSV_JOINER.join(app.getApplicationTags());
} }
unmanagedApplication = app.isUnmanagedApp();
} }
public String getAppId() { public String getAppId() {
@ -188,4 +190,8 @@ public class AppInfo {
public String getApplicationTags() { public String getApplicationTags() {
return applicationTags; return applicationTags;
} }
public boolean isUnmanagedApp() {
return unmanagedApplication;
}
} }

View File

@ -32,6 +32,7 @@ public class ApplicationCreatedEvent extends
private String queue; private String queue;
private long submittedTime; private long submittedTime;
private Set<String> appTags; private Set<String> appTags;
private boolean unmanagedApplication;
public ApplicationCreatedEvent(ApplicationId appId, public ApplicationCreatedEvent(ApplicationId appId,
String name, String name,
@ -40,7 +41,8 @@ public class ApplicationCreatedEvent extends
String queue, String queue,
long submittedTime, long submittedTime,
long createdTime, long createdTime,
Set<String> appTags) { Set<String> appTags,
boolean unmanagedApplication) {
super(SystemMetricsEventType.APP_CREATED, createdTime); super(SystemMetricsEventType.APP_CREATED, createdTime);
this.appId = appId; this.appId = appId;
this.name = name; this.name = name;
@ -49,6 +51,7 @@ public class ApplicationCreatedEvent extends
this.queue = queue; this.queue = queue;
this.submittedTime = submittedTime; this.submittedTime = submittedTime;
this.appTags = appTags; this.appTags = appTags;
this.unmanagedApplication = unmanagedApplication;
} }
@Override @Override
@ -83,4 +86,8 @@ public class ApplicationCreatedEvent extends
public Set<String> getAppTags() { public Set<String> getAppTags() {
return appTags; return appTags;
} }
public boolean isUnmanagedApp() {
return unmanagedApplication;
}
} }

View File

@ -106,7 +106,8 @@ public class SystemMetricsPublisher extends CompositeService {
app.getUser(), app.getUser(),
app.getQueue(), app.getQueue(),
app.getSubmitTime(), app.getSubmitTime(),
createdTime, app.getApplicationTags())); createdTime, app.getApplicationTags(),
app.getApplicationSubmissionContext().getUnmanagedAM()));
} }
} }
@ -253,6 +254,9 @@ public class SystemMetricsPublisher extends CompositeService {
event.getSubmittedTime()); event.getSubmittedTime());
entityInfo.put(ApplicationMetricsConstants.APP_TAGS_INFO, entityInfo.put(ApplicationMetricsConstants.APP_TAGS_INFO,
event.getAppTags()); event.getAppTags());
entityInfo.put(
ApplicationMetricsConstants.UNMANAGED_APPLICATION_ENTITY_INFO,
event.isUnmanagedApp());
entity.setOtherInfo(entityInfo); entity.setOtherInfo(entityInfo);
TimelineEvent tEvent = new TimelineEvent(); TimelineEvent tEvent = new TimelineEvent();
tEvent.setEventType( tEvent.setEventType(

View File

@ -663,8 +663,9 @@ public class RMAppImpl implements RMApp, Recoverable {
createApplicationState(), diags, createApplicationState(), diags,
trackingUrl, this.startTime, this.finishTime, finishState, trackingUrl, this.startTime, this.finishTime, finishState,
appUsageReport, origTrackingUrl, progress, this.applicationType, appUsageReport, origTrackingUrl, progress, this.applicationType,
amrmToken, applicationTags); amrmToken, applicationTags);
report.setLogAggregationStatus(logAggregationStatus); report.setLogAggregationStatus(logAggregationStatus);
report.setUnmanagedApp(submissionContext.getUnmanagedAM());
return report; return report;
} finally { } finally {
this.readLock.unlock(); this.readLock.unlock();

View File

@ -96,6 +96,7 @@ public class AppInfo {
protected List<ResourceRequest> resourceRequests; protected List<ResourceRequest> resourceRequests;
protected LogAggregationStatus logAggregationStatus; protected LogAggregationStatus logAggregationStatus;
protected boolean unmanagedApplication;
public AppInfo() { public AppInfo() {
} // JAXB needs this } // JAXB needs this
@ -183,6 +184,8 @@ public class AppInfo {
appMetrics.getResourcePreempted().getVirtualCores(); appMetrics.getResourcePreempted().getVirtualCores();
memorySeconds = appMetrics.getMemorySeconds(); memorySeconds = appMetrics.getMemorySeconds();
vcoreSeconds = appMetrics.getVcoreSeconds(); vcoreSeconds = appMetrics.getVcoreSeconds();
unmanagedApplication =
app.getApplicationSubmissionContext().getUnmanagedAM();
} }
} }
@ -321,4 +324,8 @@ public class AppInfo {
public LogAggregationStatus getLogAggregationStatus() { public LogAggregationStatus getLogAggregationStatus() {
return this.logAggregationStatus; return this.logAggregationStatus;
} }
public boolean isUnmanagedApp() {
return unmanagedApplication;
}
} }

View File

@ -29,6 +29,7 @@ import java.util.Set;
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;
import org.apache.hadoop.yarn.api.records.ApplicationSubmissionContext;
import org.apache.hadoop.yarn.api.records.Container; import org.apache.hadoop.yarn.api.records.Container;
import org.apache.hadoop.yarn.api.records.ContainerId; import org.apache.hadoop.yarn.api.records.ContainerId;
import org.apache.hadoop.yarn.api.records.ContainerState; import org.apache.hadoop.yarn.api.records.ContainerState;
@ -134,6 +135,12 @@ public class TestSystemMetricsPublisher {
Assert.assertEquals(app.getQueue(), Assert.assertEquals(app.getQueue(),
entity.getOtherInfo() entity.getOtherInfo()
.get(ApplicationMetricsConstants.QUEUE_ENTITY_INFO)); .get(ApplicationMetricsConstants.QUEUE_ENTITY_INFO));
Assert.assertEquals(
app.getApplicationSubmissionContext().getUnmanagedAM(),
entity.getOtherInfo().get(
ApplicationMetricsConstants.UNMANAGED_APPLICATION_ENTITY_INFO));
Assert Assert
.assertEquals( .assertEquals(
app.getUser(), app.getUser(),
@ -362,6 +369,9 @@ public class TestSystemMetricsPublisher {
appTags.add("test"); appTags.add("test");
appTags.add("tags"); appTags.add("tags");
when(app.getApplicationTags()).thenReturn(appTags); when(app.getApplicationTags()).thenReturn(appTags);
ApplicationSubmissionContext asc = mock(ApplicationSubmissionContext.class);
when(asc.getUnmanagedAM()).thenReturn(false);
when(app.getApplicationSubmissionContext()).thenReturn(asc);
return app; return app;
} }

View File

@ -1308,14 +1308,15 @@ public class TestRMWebServicesApps extends JerseyTestBase {
WebServicesTestUtils.getXmlInt(element, "preemptedResourceVCores"), WebServicesTestUtils.getXmlInt(element, "preemptedResourceVCores"),
WebServicesTestUtils.getXmlInt(element, "numNonAMContainerPreempted"), WebServicesTestUtils.getXmlInt(element, "numNonAMContainerPreempted"),
WebServicesTestUtils.getXmlInt(element, "numAMContainerPreempted"), WebServicesTestUtils.getXmlInt(element, "numAMContainerPreempted"),
WebServicesTestUtils.getXmlString(element, "logAggregationStatus")); WebServicesTestUtils.getXmlString(element, "logAggregationStatus"),
WebServicesTestUtils.getXmlBoolean(element, "unmanagedApplication"));
} }
} }
public void verifyAppInfo(JSONObject info, RMApp app) throws JSONException, public void verifyAppInfo(JSONObject info, RMApp app) throws JSONException,
Exception { Exception {
assertEquals("incorrect number of elements", 28, info.length()); assertEquals("incorrect number of elements", 29, info.length());
verifyAppInfoGeneric(app, info.getString("id"), info.getString("user"), verifyAppInfoGeneric(app, info.getString("id"), info.getString("user"),
info.getString("name"), info.getString("applicationType"), info.getString("name"), info.getString("applicationType"),
@ -1331,7 +1332,8 @@ public class TestRMWebServicesApps extends JerseyTestBase {
info.getInt("preemptedResourceVCores"), info.getInt("preemptedResourceVCores"),
info.getInt("numNonAMContainerPreempted"), info.getInt("numNonAMContainerPreempted"),
info.getInt("numAMContainerPreempted"), info.getInt("numAMContainerPreempted"),
info.getString("logAggregationStatus")); info.getString("logAggregationStatus"),
info.getBoolean("unmanagedApplication"));
} }
public void verifyAppInfoGeneric(RMApp app, String id, String user, public void verifyAppInfoGeneric(RMApp app, String id, String user,
@ -1342,7 +1344,8 @@ public class TestRMWebServicesApps extends JerseyTestBase {
int allocatedMB, int allocatedVCores, int numContainers, int allocatedMB, int allocatedVCores, int numContainers,
int preemptedResourceMB, int preemptedResourceVCores, int preemptedResourceMB, int preemptedResourceVCores,
int numNonAMContainerPreempted, int numAMContainerPreempted, int numNonAMContainerPreempted, int numAMContainerPreempted,
String logAggregationStatus) throws JSONException, String logAggregationStatus, boolean unmanagedApplication)
throws JSONException,
Exception { Exception {
WebServicesTestUtils.checkStringMatch("id", app.getApplicationId() WebServicesTestUtils.checkStringMatch("id", app.getApplicationId()
@ -1392,6 +1395,9 @@ public class TestRMWebServicesApps extends JerseyTestBase {
assertEquals("Log aggregation Status doesn't match", app assertEquals("Log aggregation Status doesn't match", app
.getLogAggregationStatusForAppReport().toString(), .getLogAggregationStatusForAppReport().toString(),
logAggregationStatus); logAggregationStatus);
assertEquals("unmanagedApplication doesn't match", app
.getApplicationSubmissionContext().getUnmanagedAM(),
unmanagedApplication);
} }
@Test @Test

View File

@ -1380,7 +1380,8 @@ Response Body:
"applicationType" : "MAPREDUCE", "applicationType" : "MAPREDUCE",
"applicationTags" : "" "applicationTags" : ""
"memorySeconds" : 151730, "memorySeconds" : 151730,
"vcoreSeconds" : 103 "vcoreSeconds" : 103,
"unmanagedApplication":"false"
}, },
{ {
"finishedTime" : 1326815789546, "finishedTime" : 1326815789546,
@ -1406,7 +1407,8 @@ Response Body:
"applicationTags" : "tag1" "applicationTags" : "tag1"
"memorySeconds" : 640064, "memorySeconds" : 640064,
"vcoreSeconds" : 442 "vcoreSeconds" : 442
} "unmanagedApplication":"false"
}
] ]
} }
} }
@ -1455,6 +1457,7 @@ Response Body:
<runningContainers>0</runningContainers> <runningContainers>0</runningContainers>
<memorySeconds>151730</memorySeconds> <memorySeconds>151730</memorySeconds>
<vcoreSeconds>103</vcoreSeconds> <vcoreSeconds>103</vcoreSeconds>
<unmanagedApplication>false</unmanagedApplication>
</app> </app>
<app> <app>
<id>application_1326815542473_0002</id> <id>application_1326815542473_0002</id>
@ -1480,6 +1483,7 @@ Response Body:
<runningContainers>0</runningContainers> <runningContainers>0</runningContainers>
<memorySeconds>640064</memorySeconds> <memorySeconds>640064</memorySeconds>
<vcoreSeconds>442</vcoreSeconds> <vcoreSeconds>442</vcoreSeconds>
<unmanagedApplication>false</unmanagedApplication>
</app> </app>
</apps> </apps>
``` ```
@ -1639,6 +1643,7 @@ Note that depending on security settings a user might not be able to see all the
| runningContainers | int | The number of containers currently running for the application | | runningContainers | int | The number of containers currently running for the application |
| memorySeconds | long | The amount of memory the application has allocated (megabyte-seconds) | | memorySeconds | long | The amount of memory the application has allocated (megabyte-seconds) |
| vcoreSeconds | long | The amount of CPU resources the application has allocated (virtual core-seconds) | | vcoreSeconds | long | The amount of CPU resources the application has allocated (virtual core-seconds) |
| unmanagedApplication | boolean | Is the application unmanaged. |
### Response Examples ### Response Examples
@ -1678,7 +1683,8 @@ Response Body:
"trackingUrl" : "http://host.domain.com:8088/proxy/application_1326821518301_0005/jobhistory/job/job_1326821518301_5_5", "trackingUrl" : "http://host.domain.com:8088/proxy/application_1326821518301_0005/jobhistory/job/job_1326821518301_5_5",
"queue" : "a1", "queue" : "a1",
"memorySeconds" : 151730, "memorySeconds" : 151730,
"vcoreSeconds" : 103 "vcoreSeconds" : 103,
"unmanagedApplication":"false"
} }
} }
``` ```
@ -1720,6 +1726,7 @@ Response Body:
<amHostHttpAddress>host.domain.com:8042</amHostHttpAddress> <amHostHttpAddress>host.domain.com:8042</amHostHttpAddress>
<memorySeconds>151730</memorySeconds> <memorySeconds>151730</memorySeconds>
<vcoreSeconds>103</vcoreSeconds> <vcoreSeconds>103</vcoreSeconds>
<unmanagedApplication>false</unmanagedApplication>
</app> </app>
``` ```

View File

@ -1087,7 +1087,8 @@ Response Body:
"submittedTime":1430425001004, "submittedTime":1430425001004,
"startedTime":1430425001004, "startedTime":1430425001004,
"finishedTime":1430425008861, "finishedTime":1430425008861,
"elapsedTime":7857}, "elapsedTime":7857,
"unmanagedApplication":"false"},
{ {
"appId":"application_1430424020775_0003", "appId":"application_1430424020775_0003",
"currentAppAttemptId":"appattempt_1430424020775_0003_000001", "currentAppAttemptId":"appattempt_1430424020775_0003_000001",
@ -1106,7 +1107,8 @@ Response Body:
"submittedTime":1430424956650, "submittedTime":1430424956650,
"startedTime":1430424956650, "startedTime":1430424956650,
"finishedTime":1430424963907, "finishedTime":1430424963907,
"elapsedTime":7257}, "elapsedTime":7257,
"unmanagedApplication":"false"},
{ {
"appId":"application_1430424020775_0002", "appId":"application_1430424020775_0002",
"currentAppAttemptId":"appattempt_1430424020775_0002_000001", "currentAppAttemptId":"appattempt_1430424020775_0002_000001",
@ -1125,7 +1127,8 @@ Response Body:
"submittedTime":1430424769395, "submittedTime":1430424769395,
"startedTime":1430424769395, "startedTime":1430424769395,
"finishedTime":1430424776594, "finishedTime":1430424776594,
"elapsedTime":7199}, "elapsedTime":7199,
"unmanagedApplication":"false"},
{ {
"appId":"application_1430424020775_0001", "appId":"application_1430424020775_0001",
"currentAppAttemptId":"appattempt_1430424020775_0001_000001", "currentAppAttemptId":"appattempt_1430424020775_0001_000001",
@ -1145,7 +1148,8 @@ Response Body:
"startedTime":1430424072153, "startedTime":1430424072153,
"finishedTime":1430424776594, "finishedTime":1430424776594,
"elapsedTime":18344, "elapsedTime":18344,
"applicationTags":"mrapplication,ta-example" "applicationTags":"mrapplication,ta-example",
"unmanagedApplication":"false"
} }
] ]
} }
@ -1187,6 +1191,7 @@ Response Body:
<startedTime>1430425001004</startedTime> <startedTime>1430425001004</startedTime>
<finishedTime>1430425008861</finishedTime> <finishedTime>1430425008861</finishedTime>
<elapsedTime>7857</elapsedTime> <elapsedTime>7857</elapsedTime>
<unmanagedApplication>false</unmanagedApplication>
</app> </app>
<app> <app>
<appId>application_1430424020775_0003</appId> <appId>application_1430424020775_0003</appId>
@ -1207,6 +1212,7 @@ Response Body:
<startedTime>1430424956650</startedTime> <startedTime>1430424956650</startedTime>
<finishedTime>1430424963907</finishedTime> <finishedTime>1430424963907</finishedTime>
<elapsedTime>7257</elapsedTime> <elapsedTime>7257</elapsedTime>
<unmanagedApplication>false</unmanagedApplication>
</app> </app>
<app> <app>
<appId>application_1430424020775_0002</appId> <appId>application_1430424020775_0002</appId>
@ -1227,6 +1233,7 @@ Response Body:
<startedTime>1430424769395</startedTime> <startedTime>1430424769395</startedTime>
<finishedTime>1430424776594</finishedTime> <finishedTime>1430424776594</finishedTime>
<elapsedTime>7199</elapsedTime> <elapsedTime>7199</elapsedTime>
<unmanagedApplication>false</unmanagedApplication>
</app> </app>
<app> <app>
<appId>application_1430424020775_0001</appId> <appId>application_1430424020775_0001</appId>
@ -1248,6 +1255,7 @@ Response Body:
<finishedTime>1430424072153</finishedTime> <finishedTime>1430424072153</finishedTime>
<elapsedTime>18344</elapsedTime> <elapsedTime>18344</elapsedTime>
<applicationTags>mrapplication,ta-example</applicationTags> <applicationTags>mrapplication,ta-example</applicationTags>
<unmanagedApplication>false</unmanagedApplication>
</app> </app>
</apps> </apps>
@ -1298,6 +1306,7 @@ None
| `host` | string | The host of the ApplicationMaster | | `host` | string | The host of the ApplicationMaster |
| `rpcPort` | int | The RPC port of the ApplicationMaster; zero if no IPC service declared | | `rpcPort` | int | The RPC port of the ApplicationMaster; zero if no IPC service declared |
| `applicationTags` | string | The application tags. | | `applicationTags` | string | The application tags. |
| `unmanagedApplication` | boolean | Is the application unmanaged. |
### Response Examples: ### Response Examples:
@ -1334,7 +1343,8 @@ Response Body:
"startedTime": 1430424053809, "startedTime": 1430424053809,
"finishedTime": 1430424072153, "finishedTime": 1430424072153,
"elapsedTime": 18344, "elapsedTime": 18344,
"applicationTags": mrapplication,tag-example "applicationTags": mrapplication,tag-example,
"unmanagedApplication":"false"
} }
#### XML response #### XML response
@ -1373,6 +1383,7 @@ Response Body:
<finishedTime>1430424072153</finishedTime> <finishedTime>1430424072153</finishedTime>
<elapsedTime>18344</elapsedTime> <elapsedTime>18344</elapsedTime>
<applicationTags>mrapplication,ta-example</applicationTags> <applicationTags>mrapplication,ta-example</applicationTags>
<unmanagedApplication>false</unmanagedApplication>
</app> </app>
## <a name="REST_API_APPLICATION_ATTEMPT_LIST"></a>Application Attempt List ## <a name="REST_API_APPLICATION_ATTEMPT_LIST"></a>Application Attempt List