From fbcfca6f91ce7642df48caf5d60dc123ec377ed2 Mon Sep 17 00:00:00 2001 From: Robert Kanter Date: Wed, 12 Aug 2015 15:47:47 -0700 Subject: [PATCH] YARN-4031. Add JvmPauseMonitor to ApplicationHistoryServer and WebAppProxyServer (djp via rkanter) (cherry picked from commit dc2340c60e33f903f8fd34958ec746c989016191) --- hadoop-yarn-project/CHANGES.txt | 3 ++ .../ApplicationHistoryServer.java | 14 ++++++-- .../server/webproxy/WebAppProxyServer.java | 32 +++++++++++++++++-- 3 files changed, 45 insertions(+), 4 deletions(-) diff --git a/hadoop-yarn-project/CHANGES.txt b/hadoop-yarn-project/CHANGES.txt index 01d6420e1a5..028d5b88df7 100644 --- a/hadoop-yarn-project/CHANGES.txt +++ b/hadoop-yarn-project/CHANGES.txt @@ -344,6 +344,9 @@ Release 2.8.0 - UNRELEASED YARN-4026. Refactored ContainerAllocator to accept a list of priorites rather than a single priority. (Wangda Tan via jianhe) + YARN-4031. Add JvmPauseMonitor to ApplicationHistoryServer and + WebAppProxyServer (djp via rkanter) + OPTIMIZATIONS YARN-3339. TestDockerContainerExecutor should pull a single image and not diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/ApplicationHistoryServer.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/ApplicationHistoryServer.java index 88cd1533443..0ec27d75d20 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/ApplicationHistoryServer.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/ApplicationHistoryServer.java @@ -34,6 +34,7 @@ import org.apache.hadoop.service.CompositeService; import org.apache.hadoop.service.Service; import org.apache.hadoop.util.ExitUtil; import org.apache.hadoop.util.GenericOptionsParser; +import org.apache.hadoop.util.JvmPauseMonitor; import org.apache.hadoop.util.ReflectionUtils; import org.apache.hadoop.util.ShutdownHookManager; import org.apache.hadoop.util.StringUtils; @@ -73,6 +74,7 @@ public class ApplicationHistoryServer extends CompositeService { private TimelineDelegationTokenSecretManagerService secretManagerService; private TimelineDataManager timelineDataManager; private WebApp webApp; + private JvmPauseMonitor pauseMonitor; public ApplicationHistoryServer() { super(ApplicationHistoryServer.class.getName()); @@ -96,7 +98,9 @@ public class ApplicationHistoryServer extends CompositeService { addService((Service) historyManager); DefaultMetricsSystem.initialize("ApplicationHistoryServer"); - JvmMetrics.initSingleton("ApplicationHistoryServer", null); + JvmMetrics jm = JvmMetrics.initSingleton("ApplicationHistoryServer", null); + pauseMonitor = new JvmPauseMonitor(conf); + jm.setPauseMonitor(pauseMonitor); super.serviceInit(conf); } @@ -107,6 +111,10 @@ public class ApplicationHistoryServer extends CompositeService { } catch(IOException ie) { throw new YarnRuntimeException("Failed to login", ie); } + + if (pauseMonitor != null) { + pauseMonitor.start(); + } super.serviceStart(); startWebApp(); } @@ -116,7 +124,9 @@ public class ApplicationHistoryServer extends CompositeService { if (webApp != null) { webApp.stop(); } - + if (pauseMonitor != null) { + pauseMonitor.stop(); + } DefaultMetricsSystem.shutdown(); super.serviceStop(); } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-web-proxy/src/main/java/org/apache/hadoop/yarn/server/webproxy/WebAppProxyServer.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-web-proxy/src/main/java/org/apache/hadoop/yarn/server/webproxy/WebAppProxyServer.java index b1c563cbc87..4c1caa6357b 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-web-proxy/src/main/java/org/apache/hadoop/yarn/server/webproxy/WebAppProxyServer.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-web-proxy/src/main/java/org/apache/hadoop/yarn/server/webproxy/WebAppProxyServer.java @@ -22,10 +22,13 @@ import java.io.IOException; import java.net.InetSocketAddress; import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.metrics2.lib.DefaultMetricsSystem; +import org.apache.hadoop.metrics2.source.JvmMetrics; import org.apache.hadoop.security.SecurityUtil; import org.apache.hadoop.service.CompositeService; import org.apache.hadoop.util.ExitUtil; import org.apache.hadoop.util.GenericOptionsParser; +import org.apache.hadoop.util.JvmPauseMonitor; import org.apache.hadoop.util.ShutdownHookManager; import org.apache.hadoop.util.StringUtils; import org.apache.hadoop.yarn.YarnUncaughtExceptionHandler; @@ -48,7 +51,9 @@ public class WebAppProxyServer extends CompositeService { WebAppProxyServer.class); private WebAppProxy proxy = null; - + + private JvmPauseMonitor pauseMonitor; + public WebAppProxyServer() { super(WebAppProxyServer.class.getName()); } @@ -56,12 +61,35 @@ public class WebAppProxyServer extends CompositeService { @Override protected void serviceInit(Configuration conf) throws Exception { Configuration config = new YarnConfiguration(conf); - doSecureLogin(conf); + doSecureLogin(conf); proxy = new WebAppProxy(); addService(proxy); + + DefaultMetricsSystem.initialize("WebAppProxyServer"); + JvmMetrics jm = JvmMetrics.initSingleton("WebAppProxyServer", null); + pauseMonitor = new JvmPauseMonitor(conf); + jm.setPauseMonitor(pauseMonitor); + super.serviceInit(config); } + @Override + protected void serviceStart() throws Exception { + if (pauseMonitor != null) { + pauseMonitor.start(); + } + super.serviceStart(); + } + + @Override + protected void serviceStop() throws Exception { + super.serviceStop(); + DefaultMetricsSystem.shutdown(); + if (pauseMonitor != null) { + pauseMonitor.stop(); + } + } + /** * Log in as the Kerberose principal designated for the proxy * @param conf the configuration holding this information in it.