diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java
index 1b6bd0e..5760232 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java
@@ -2081,6 +2081,9 @@ public static boolean isAclEnabled(Configuration conf) {
public static final long DEFAULT_NM_PROCESS_KILL_WAIT_MS =
5000;
+ public static final String NM_CONTAINER_MONITOR_CLASS =
+ NM_PREFIX + "container-monitor.class";
+
/** Max time to wait to establish a connection to RM */
public static final String RESOURCEMANAGER_CONNECT_MAX_WAIT_MS =
RM_PREFIX + "connect.max-wait.ms";
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/yarn-default.xml b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/yarn-default.xml
index d450eca..74917ce 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/yarn-default.xml
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/yarn-default.xml
@@ -1030,6 +1030,12 @@
+ who will monitor the containers.
+ yarn.nodemanager.container-monitor.class
+ org.apache.hadoop.yarn.server.nodemanager.containermanager.monitor.ContainersMonitorImpl
+
+
+
Comma separated List of container state transition listeners.
yarn.nodemanager.container-state-transition-listener.classes
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/ContainerManagerImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/ContainerManagerImpl.java
index 44bfc68..cf33c53 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/ContainerManagerImpl.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/ContainerManagerImpl.java
@@ -164,6 +164,7 @@
import java.io.DataInputStream;
import java.io.IOException;
+import java.lang.reflect.Constructor;
import java.net.InetSocketAddress;
import java.net.URISyntaxException;
import java.nio.ByteBuffer;
@@ -343,7 +344,22 @@ protected ContainerScheduler createContainerScheduler(Context cntxt) {
}
protected ContainersMonitor createContainersMonitor(ContainerExecutor exec) {
- return new ContainersMonitorImpl(exec, dispatcher, this.context);
+ Class containersMonitorClass = this.context.getConf().getClass(
+ YarnConfiguration.NM_CONTAINER_MONITOR_CLASS,
+ ContainersMonitorImpl.class);
+
+ try {
+ Constructor> constructor = containersMonitorClass.getConstructor(
+ ContainerExecutor.class, AsyncDispatcher.class, Context.class);
+ LOG.info(
+ "ContainerMonitor use implement class : " + containersMonitorClass
+ .getName());
+ return (ContainersMonitor) constructor.newInstance(exec, this.dispatcher,
+ this.context);
+ } catch (Exception e) {
+ LOG.error("create ContainersMonitor fail", e);
+ throw new RuntimeException(e);
+ }
}
@SuppressWarnings("unchecked")