YARN-9418. ATSV2 /apps//entities/YARN_CONTAINER rest api does not show metrics. Contributed by Prabhu Joseph.
This commit is contained in:
parent
8de93fca3c
commit
998aa3de2c
|
@ -186,8 +186,6 @@ public class NMTimelinePublisher extends CompositeService {
|
||||||
Math.round(cpuUsagePercentPerCore));
|
Math.round(cpuUsagePercentPerCore));
|
||||||
entity.addMetric(cpuMetric);
|
entity.addMetric(cpuMetric);
|
||||||
}
|
}
|
||||||
entity.setIdPrefix(TimelineServiceHelper.
|
|
||||||
invertLong(container.getContainerStartTime()));
|
|
||||||
ApplicationId appId = container.getContainerId().
|
ApplicationId appId = container.getContainerId().
|
||||||
getApplicationAttemptId().getApplicationId();
|
getApplicationAttemptId().getApplicationId();
|
||||||
try {
|
try {
|
||||||
|
@ -253,7 +251,6 @@ public class NMTimelinePublisher extends CompositeService {
|
||||||
long containerStartTime = container.getContainerStartTime();
|
long containerStartTime = container.getContainerStartTime();
|
||||||
entity.addEvent(tEvent);
|
entity.addEvent(tEvent);
|
||||||
entity.setCreatedTime(containerStartTime);
|
entity.setCreatedTime(containerStartTime);
|
||||||
entity.setIdPrefix(TimelineServiceHelper.invertLong(containerStartTime));
|
|
||||||
dispatcher.getEventHandler().handle(new TimelinePublishEvent(entity,
|
dispatcher.getEventHandler().handle(new TimelinePublishEvent(entity,
|
||||||
containerId.getApplicationAttemptId().getApplicationId()));
|
containerId.getApplicationAttemptId().getApplicationId()));
|
||||||
}
|
}
|
||||||
|
@ -281,7 +278,6 @@ public class NMTimelinePublisher extends CompositeService {
|
||||||
tEvent.setId(ContainerMetricsConstants.FINISHED_EVENT_TYPE);
|
tEvent.setId(ContainerMetricsConstants.FINISHED_EVENT_TYPE);
|
||||||
tEvent.setTimestamp(containerFinishTime);
|
tEvent.setTimestamp(containerFinishTime);
|
||||||
entity.addEvent(tEvent);
|
entity.addEvent(tEvent);
|
||||||
entity.setIdPrefix(TimelineServiceHelper.invertLong(containerStartTime));
|
|
||||||
|
|
||||||
dispatcher.getEventHandler().handle(new TimelinePublishEvent(entity,
|
dispatcher.getEventHandler().handle(new TimelinePublishEvent(entity,
|
||||||
containerId.getApplicationAttemptId().getApplicationId()));
|
containerId.getApplicationAttemptId().getApplicationId()));
|
||||||
|
@ -299,8 +295,6 @@ public class NMTimelinePublisher extends CompositeService {
|
||||||
tEvent.setId(eventType);
|
tEvent.setId(eventType);
|
||||||
tEvent.setTimestamp(event.getTimestamp());
|
tEvent.setTimestamp(event.getTimestamp());
|
||||||
entity.addEvent(tEvent);
|
entity.addEvent(tEvent);
|
||||||
entity.setIdPrefix(TimelineServiceHelper.
|
|
||||||
invertLong(container.getContainerStartTime()));
|
|
||||||
|
|
||||||
ApplicationId appId = container.getContainerId().
|
ApplicationId appId = container.getContainerId().
|
||||||
getApplicationAttemptId().getApplicationId();
|
getApplicationAttemptId().getApplicationId();
|
||||||
|
@ -336,6 +330,8 @@ public class NMTimelinePublisher extends CompositeService {
|
||||||
ContainerId containerId) {
|
ContainerId containerId) {
|
||||||
ContainerEntity entity = new ContainerEntity();
|
ContainerEntity entity = new ContainerEntity();
|
||||||
entity.setId(containerId.toString());
|
entity.setId(containerId.toString());
|
||||||
|
entity.setIdPrefix(TimelineServiceHelper.invertLong(
|
||||||
|
containerId.getContainerId()));
|
||||||
Identifier parentIdentifier = new Identifier();
|
Identifier parentIdentifier = new Identifier();
|
||||||
parentIdentifier
|
parentIdentifier
|
||||||
.setType(TimelineEntityType.YARN_APPLICATION_ATTEMPT.name());
|
.setType(TimelineEntityType.YARN_APPLICATION_ATTEMPT.name());
|
||||||
|
|
|
@ -46,6 +46,7 @@ import org.apache.hadoop.yarn.server.nodemanager.Context;
|
||||||
import org.apache.hadoop.yarn.server.nodemanager.containermanager.application.ApplicationContainerFinishedEvent;
|
import org.apache.hadoop.yarn.server.nodemanager.containermanager.application.ApplicationContainerFinishedEvent;
|
||||||
import org.apache.hadoop.yarn.server.nodemanager.containermanager.container.Container;
|
import org.apache.hadoop.yarn.server.nodemanager.containermanager.container.Container;
|
||||||
import org.apache.hadoop.yarn.util.ResourceCalculatorProcessTree;
|
import org.apache.hadoop.yarn.util.ResourceCalculatorProcessTree;
|
||||||
|
import org.apache.hadoop.yarn.util.TimelineServiceHelper;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
|
@ -140,6 +141,8 @@ public class TestNMTimelinePublisher {
|
||||||
entity.getInfo().get(ContainerMetricsConstants.DIAGNOSTICS_INFO));
|
entity.getInfo().get(ContainerMetricsConstants.DIAGNOSTICS_INFO));
|
||||||
Assert.assertEquals(exitStatus,
|
Assert.assertEquals(exitStatus,
|
||||||
entity.getInfo().get(ContainerMetricsConstants.EXIT_STATUS_INFO));
|
entity.getInfo().get(ContainerMetricsConstants.EXIT_STATUS_INFO));
|
||||||
|
Assert.assertEquals(TimelineServiceHelper.invertLong(
|
||||||
|
cId.getContainerId()), entity.getIdPrefix());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test public void testContainerResourceUsage() {
|
@Test public void testContainerResourceUsage() {
|
||||||
|
@ -148,29 +151,31 @@ public class TestNMTimelinePublisher {
|
||||||
Container aContainer = mock(Container.class);
|
Container aContainer = mock(Container.class);
|
||||||
when(aContainer.getContainerId()).thenReturn(ContainerId
|
when(aContainer.getContainerId()).thenReturn(ContainerId
|
||||||
.newContainerId(ApplicationAttemptId.newInstance(appId, 1), 0L));
|
.newContainerId(ApplicationAttemptId.newInstance(appId, 1), 0L));
|
||||||
|
long idPrefix = TimelineServiceHelper.invertLong(
|
||||||
|
aContainer.getContainerId().getContainerId());
|
||||||
publisher.reportContainerResourceUsage(aContainer, 1024L, 8F);
|
publisher.reportContainerResourceUsage(aContainer, 1024L, 8F);
|
||||||
verifyPublishedResourceUsageMetrics(timelineClient, 1024L, 8);
|
verifyPublishedResourceUsageMetrics(timelineClient, 1024L, 8, idPrefix);
|
||||||
timelineClient.reset();
|
timelineClient.reset();
|
||||||
|
|
||||||
publisher.reportContainerResourceUsage(aContainer, 1024L, 0.8F);
|
publisher.reportContainerResourceUsage(aContainer, 1024L, 0.8F);
|
||||||
verifyPublishedResourceUsageMetrics(timelineClient, 1024L, 1);
|
verifyPublishedResourceUsageMetrics(timelineClient, 1024L, 1, idPrefix);
|
||||||
timelineClient.reset();
|
timelineClient.reset();
|
||||||
|
|
||||||
publisher.reportContainerResourceUsage(aContainer, 1024L, 0.49F);
|
publisher.reportContainerResourceUsage(aContainer, 1024L, 0.49F);
|
||||||
verifyPublishedResourceUsageMetrics(timelineClient, 1024L, 0);
|
verifyPublishedResourceUsageMetrics(timelineClient, 1024L, 0, idPrefix);
|
||||||
timelineClient.reset();
|
timelineClient.reset();
|
||||||
|
|
||||||
publisher.reportContainerResourceUsage(aContainer, 1024L,
|
publisher.reportContainerResourceUsage(aContainer, 1024L,
|
||||||
(float) ResourceCalculatorProcessTree.UNAVAILABLE);
|
(float) ResourceCalculatorProcessTree.UNAVAILABLE);
|
||||||
verifyPublishedResourceUsageMetrics(timelineClient, 1024L,
|
verifyPublishedResourceUsageMetrics(timelineClient, 1024L,
|
||||||
ResourceCalculatorProcessTree.UNAVAILABLE);
|
ResourceCalculatorProcessTree.UNAVAILABLE, idPrefix);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void verifyPublishedResourceUsageMetrics(
|
private void verifyPublishedResourceUsageMetrics(DummyTimelineClient
|
||||||
DummyTimelineClient timelineClient, long memoryUsage, int cpuUsage) {
|
dummyTimelineClient, long memoryUsage, int cpuUsage, long idPrefix) {
|
||||||
TimelineEntity[] entities = null;
|
TimelineEntity[] entities = null;
|
||||||
for (int i = 0; i < 10; i++) {
|
for (int i = 0; i < 10; i++) {
|
||||||
entities = timelineClient.getLastPublishedEntities();
|
entities = dummyTimelineClient.getLastPublishedEntities();
|
||||||
if (entities != null) {
|
if (entities != null) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -188,6 +193,7 @@ public class TestNMTimelinePublisher {
|
||||||
assertNotNull("entities are expected to be published", entities);
|
assertNotNull("entities are expected to be published", entities);
|
||||||
assertEquals("Expected number of metrics notpublished",
|
assertEquals("Expected number of metrics notpublished",
|
||||||
numberOfResourceMetrics, entities[0].getMetrics().size());
|
numberOfResourceMetrics, entities[0].getMetrics().size());
|
||||||
|
assertEquals(idPrefix, entities[0].getIdPrefix());
|
||||||
Iterator<TimelineMetric> metrics = entities[0].getMetrics().iterator();
|
Iterator<TimelineMetric> metrics = entities[0].getMetrics().iterator();
|
||||||
while (metrics.hasNext()) {
|
while (metrics.hasNext()) {
|
||||||
TimelineMetric metric = metrics.next();
|
TimelineMetric metric = metrics.next();
|
||||||
|
|
|
@ -441,6 +441,8 @@ public class TimelineServiceV2Publisher extends AbstractSystemMetricsPublisher {
|
||||||
ContainerId containerId) {
|
ContainerId containerId) {
|
||||||
ContainerEntity entity = new ContainerEntity();
|
ContainerEntity entity = new ContainerEntity();
|
||||||
entity.setId(containerId.toString());
|
entity.setId(containerId.toString());
|
||||||
|
entity.setIdPrefix(TimelineServiceHelper.invertLong(
|
||||||
|
containerId.getContainerId()));
|
||||||
entity.setParent(new Identifier(TimelineEntityType.YARN_APPLICATION_ATTEMPT
|
entity.setParent(new Identifier(TimelineEntityType.YARN_APPLICATION_ATTEMPT
|
||||||
.name(), containerId.getApplicationAttemptId().toString()));
|
.name(), containerId.getApplicationAttemptId().toString()));
|
||||||
return entity;
|
return entity;
|
||||||
|
|
|
@ -293,7 +293,8 @@ public class TestSystemMetricsPublisherForV2 {
|
||||||
File appFile = new File(outputDirApp, timelineServiceFileName);
|
File appFile = new File(outputDirApp, timelineServiceFileName);
|
||||||
Assert.assertTrue(appFile.exists());
|
Assert.assertTrue(appFile.exists());
|
||||||
verifyEntity(appFile, 2,
|
verifyEntity(appFile, 2,
|
||||||
ContainerMetricsConstants.CREATED_IN_RM_EVENT_TYPE, 0, 0);
|
ContainerMetricsConstants.CREATED_IN_RM_EVENT_TYPE, 0,
|
||||||
|
TimelineServiceHelper.invertLong(containerId.getContainerId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(timeout = 10000)
|
@Test(timeout = 10000)
|
||||||
|
|
Loading…
Reference in New Issue