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-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")