diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/GenericEventTypeMetricsManager.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/GenericEventTypeMetricsManager.java new file mode 100644 index 00000000000..b6424926178 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/GenericEventTypeMetricsManager.java @@ -0,0 +1,25 @@ +package org.apache.hadoop.yarn.server.nodemanager; + +import org.apache.hadoop.metrics2.lib.DefaultMetricsSystem; +import org.apache.hadoop.yarn.metrics.GenericEventTypeMetrics; + +import static org.apache.hadoop.metrics2.lib.Interns.info; + +public final class GenericEventTypeMetricsManager { + + private GenericEventTypeMetricsManager() { + // nothing to do + } + + // Construct a GenericEventTypeMetrics for dispatcher + public static > GenericEventTypeMetrics + create(String dispatcherName, Class eventTypeClass) { + return new GenericEventTypeMetrics.EventTypeMetricsBuilder() + .setMs(DefaultMetricsSystem.instance()) + .setInfo(info("GenericEventTypeMetrics for " + eventTypeClass.getName(), + "Metrics for " + dispatcherName)) + .setEnumClass(eventTypeClass) + .setEnums(eventTypeClass.getEnumConstants()) + .build().registerMetrics(); + } +} \ No newline at end of file diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeManager.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeManager.java index 42944d632b8..1270d54fa04 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeManager.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeManager.java @@ -48,6 +48,7 @@ import org.apache.hadoop.yarn.event.EventHandler; import org.apache.hadoop.yarn.exceptions.YarnRuntimeException; import org.apache.hadoop.yarn.factory.providers.RecordFactoryProvider; +import org.apache.hadoop.yarn.metrics.GenericEventTypeMetrics; import org.apache.hadoop.yarn.server.api.protocolrecords.LogAggregationReport; import org.apache.hadoop.yarn.server.api.records.AppCollectorData; import org.apache.hadoop.yarn.server.api.records.NodeHealthStatus; @@ -61,6 +62,7 @@ import org.apache.hadoop.yarn.server.nodemanager.containermanager.container.ContainerEvent; import org.apache.hadoop.yarn.server.nodemanager.containermanager.container.ContainerImpl; import org.apache.hadoop.yarn.server.nodemanager.containermanager.container.ContainerState; +import org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainersLauncherEventType; import org.apache.hadoop.yarn.server.nodemanager.containermanager.resourceplugin.ResourcePluginManager; import org.apache.hadoop.yarn.server.nodemanager.logaggregation.tracker.NMLogAggregationStatusTracker; import org.apache.hadoop.yarn.server.nodemanager.metrics.NodeManagerMetrics; @@ -1007,7 +1009,14 @@ ContainerManagerImpl getContainerManager() { * Unit test friendly. */ protected AsyncDispatcher createNMDispatcher() { - return new AsyncDispatcher("NM Event dispatcher"); + dispatcher = new AsyncDispatcher("NM Event dispatcher"); + GenericEventTypeMetrics + containerManagerEventTypeMetrics = + GenericEventTypeMetricsManager. + create(dispatcher.getName(), ContainerManagerEventType.class); + dispatcher.addMetrics(containerManagerEventTypeMetrics, + containerManagerEventTypeMetrics.getEnumClass()); + return dispatcher; } //For testing 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 ee1a5bf2852..e2f0d9be159 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 @@ -24,7 +24,9 @@ import org.apache.hadoop.yarn.api.protocolrecords.GetLocalizationStatusesRequest; import org.apache.hadoop.yarn.api.protocolrecords.GetLocalizationStatusesResponse; import org.apache.hadoop.yarn.api.records.LocalizationStatus; +import org.apache.hadoop.yarn.metrics.GenericEventTypeMetrics; import org.apache.hadoop.yarn.server.nodemanager.containermanager.container.UpdateContainerTokenEvent; +import org.apache.hadoop.yarn.server.nodemanager.containermanager.localizer.event.LocalizerEventType; import org.apache.hadoop.yarn.server.nodemanager.containermanager.loghandler.event.LogHandlerTokenUpdatedEvent; import org.apache.hadoop.yarn.server.nodemanager.containermanager.scheduler.ContainerSchedulerEvent; import org.apache.hadoop.yarn.server.nodemanager.recovery.RecoveryIterator; @@ -105,6 +107,7 @@ import org.apache.hadoop.yarn.server.api.records.ContainerQueuingLimit; import org.apache.hadoop.yarn.server.api.records.OpportunisticContainersStatus; import org.apache.hadoop.yarn.server.nodemanager.CMgrCompletedAppsEvent; +import org.apache.hadoop.yarn.server.nodemanager.GenericEventTypeMetricsManager; import org.apache.hadoop.yarn.server.nodemanager.CMgrCompletedContainersEvent; import org.apache.hadoop.yarn.server.nodemanager.CMgrUpdateContainersEvent; import org.apache.hadoop.yarn.server.nodemanager.CMgrSignalContainersEvent; @@ -120,6 +123,11 @@ import org.apache.hadoop.yarn.server.nodemanager.amrmproxy.AMRMProxyService; import org.apache.hadoop.yarn.server.nodemanager.containermanager.application.Application; import org.apache.hadoop.yarn.server.nodemanager.containermanager.application.ApplicationContainerInitEvent; + +import org.apache.hadoop.yarn.server.nodemanager.NMAuditLogger.AuditConstants; +import org.apache.hadoop.yarn.server.nodemanager.amrmproxy.AMRMProxyService; +import org.apache.hadoop.yarn.server.nodemanager.containermanager.application.Application; +import org.apache.hadoop.yarn.server.nodemanager.containermanager.application.ApplicationContainerInitEvent; import org.apache.hadoop.yarn.server.nodemanager.containermanager.application.ApplicationEvent; import org.apache.hadoop.yarn.server.nodemanager.containermanager.application.ApplicationEventType; import org.apache.hadoop.yarn.server.nodemanager.containermanager.application.ApplicationFinishEvent; @@ -217,7 +225,7 @@ protected final NodeStatusUpdater nodeStatusUpdater; protected LocalDirsHandlerService dirsHandler; - protected final AsyncDispatcher dispatcher; + protected AsyncDispatcher dispatcher; private final DeletionService deletionService; private LogHandler logHandler; @@ -242,7 +250,7 @@ public ContainerManagerImpl(Context context, ContainerExecutor exec, this.dirsHandler = dirsHandler; // ContainerManager level dispatcher. - dispatcher = new AsyncDispatcher("NM ContainerManager dispatcher"); + dispatcher = createContainerManagerDispatcher(); this.deletionService = deletionContext; this.metrics = metrics; @@ -328,6 +336,68 @@ public void serviceInit(Configuration conf) throws Exception { recover(); } + protected AsyncDispatcher createContainerManagerDispatcher() { + dispatcher = new AsyncDispatcher("NM ContainerManager dispatcher"); + + GenericEventTypeMetrics + containerEventTypeMetrics = + GenericEventTypeMetricsManager. + create(dispatcher.getName(), ContainerEventType.class); + dispatcher.addMetrics(containerEventTypeMetrics, + containerEventTypeMetrics.getEnumClass()); + + GenericEventTypeMetrics + localizationEventTypeMetrics = + GenericEventTypeMetricsManager. + create(dispatcher.getName(), LocalizationEventType.class); + dispatcher.addMetrics(localizationEventTypeMetrics, + localizationEventTypeMetrics.getEnumClass()); + + GenericEventTypeMetrics + applicationEventTypeMetrics = + GenericEventTypeMetricsManager. + create(dispatcher.getName(), ApplicationEventType.class); + dispatcher.addMetrics(applicationEventTypeMetrics, + applicationEventTypeMetrics.getEnumClass()); + + GenericEventTypeMetrics + containersLauncherEventTypeMetrics = + GenericEventTypeMetricsManager. + create(dispatcher.getName(), ContainersLauncherEventType.class); + dispatcher.addMetrics(containersLauncherEventTypeMetrics, + containersLauncherEventTypeMetrics.getEnumClass()); + + GenericEventTypeMetrics + containerSchedulerEventTypeMetrics = + GenericEventTypeMetricsManager. + create(dispatcher.getName(), ContainerSchedulerEventType.class); + dispatcher.addMetrics(containerSchedulerEventTypeMetrics, + containerSchedulerEventTypeMetrics.getEnumClass()); + + GenericEventTypeMetrics + containersMonitorEventTypeMetrics = + GenericEventTypeMetricsManager. + create(dispatcher.getName(), ContainersMonitorEventType.class); + dispatcher.addMetrics(containersMonitorEventTypeMetrics, + containersMonitorEventTypeMetrics.getEnumClass()); + + GenericEventTypeMetrics + auxServicesEventTypeTypeMetrics = + GenericEventTypeMetricsManager. + create(dispatcher.getName(), AuxServicesEventType.class); + dispatcher.addMetrics(auxServicesEventTypeTypeMetrics, + auxServicesEventTypeTypeMetrics.getEnumClass()); + + GenericEventTypeMetrics + localizerEventTypeMetrics = + GenericEventTypeMetricsManager. + create(dispatcher.getName(), LocalizerEventType.class); + dispatcher.addMetrics(localizerEventTypeMetrics, + localizerEventTypeMetrics.getEnumClass()); + + return dispatcher; + } + protected void createAMRMProxyService(Configuration conf) { this.amrmProxyEnabled = conf.getBoolean(YarnConfiguration.AMRM_PROXY_ENABLED,