diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/ContainersMonitorImpl.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/ContainersMonitorImpl.java index cd9d6af..9e08a0f 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/ContainersMonitorImpl.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/ContainersMonitorImpl.java @@ -546,14 +546,21 @@ private void initializeProcessTrees( Container container = context.getContainers().get(containerId); String[] ipAndHost = containerExecutor.getIpAndHost(container); - if (ipAndHost != null && ipAndHost[0] != null - && ipAndHost[1] != null) { - container.setIpAndHost(ipAndHost); - LOG.info(containerId + "'s ip = " + ipAndHost[0] - + ", and hostname = " + ipAndHost[1]); + if (container != null) { + if (ipAndHost != null && ipAndHost[0] != null + && ipAndHost[1] != null) { + container.setIpAndHost(ipAndHost); + LOG.info(containerId + "'s ip = " + ipAndHost[0] + + ", and hostname = " + ipAndHost[1]); + } else { + LOG.info("Can not get both ip and hostname: " + Arrays + .toString(ipAndHost)); + } } else { LOG.info("Can not get both ip and hostname: " + Arrays .toString(ipAndHost)); + LOG.warn(containerId + " is missing. Not setting ip and " + + "hostname"); } } } @@ -692,11 +699,15 @@ private void reportResourceUsage(ContainerId containerId, long currentPmemUsage, float cpuUsagePercentPerCore) { ContainerImpl container = (ContainerImpl) context.getContainers().get(containerId); - NMTimelinePublisher nmMetricsPublisher = - container.getNMTimelinePublisher(); - if (nmMetricsPublisher != null) { - nmMetricsPublisher.reportContainerResourceUsage(container, - currentPmemUsage, cpuUsagePercentPerCore); + if (container != null) { + NMTimelinePublisher nmMetricsPublisher = + container.getNMTimelinePublisher(); + if (nmMetricsPublisher != null) { + nmMetricsPublisher.reportContainerResourceUsage(container, + currentPmemUsage, cpuUsagePercentPerCore); + } + } else { + LOG.warn(containerId + " does not exist to report"); } } diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/TestContainersMonitorResourceChange.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/TestContainersMonitorResourceChange.java index d24f89d..208a374 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/TestContainersMonitorResourceChange.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/TestContainersMonitorResourceChange.java @@ -21,6 +21,7 @@ import java.io.IOException; import java.util.HashSet; import java.util.Set; +import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ConcurrentSkipListMap; import org.apache.hadoop.conf.Configuration; @@ -64,6 +65,7 @@ private AsyncDispatcher dispatcher; private Context context; private MockContainerEventHandler containerEventHandler; + private ConcurrentMap containerMap; static final int WAIT_MS_PER_LOOP = 20; // 20 milli seconds @@ -131,7 +133,10 @@ public void setup() { executor = new MockExecutor(); dispatcher = new AsyncDispatcher(); context = Mockito.mock(Context.class); - Mockito.doReturn(new ConcurrentSkipListMap()) + containerMap = new ConcurrentSkipListMap(); + Container container = Mockito.mock(Container.class); + containerMap.put(getContainerId(1), container); + Mockito.doReturn(containerMap) .when(context).getContainers(); conf = new Configuration(); conf.set(