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 e57f988ad38..4251bfabbf9 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 @@ -2389,6 +2389,9 @@ public static boolean isAclEnabled(Configuration conf) { /** * Settings for timeline service v2.0. */ + public static final String TIMELINE_SERVICE_READER_PREFIX = + TIMELINE_SERVICE_PREFIX + "reader."; + public static final String TIMELINE_SERVICE_WRITER_CLASS = TIMELINE_SERVICE_PREFIX + "writer.class"; @@ -2397,7 +2400,7 @@ public static boolean isAclEnabled(Configuration conf) { + ".storage.HBaseTimelineWriterImpl"; public static final String TIMELINE_SERVICE_READER_CLASS = - TIMELINE_SERVICE_PREFIX + "reader.class"; + TIMELINE_SERVICE_READER_PREFIX + "class"; public static final String DEFAULT_TIMELINE_SERVICE_READER_CLASS = "org.apache.hadoop.yarn.server.timelineservice.storage" + @@ -3422,6 +3425,48 @@ public static boolean areNodeLabelsEnabled( public static final String TIMELINE_XFS_OPTIONS = TIMELINE_XFS_PREFIX + "xframe-options"; + /** + * Settings for timeline reader. + */ + public static final String TIMELINE_SERVICE_READER_BIND_HOST = + TIMELINE_SERVICE_READER_PREFIX + "bind-host"; + + public static final String TIMELINE_SERVICE_READER_WEBAPP_ADDRESS = + TIMELINE_SERVICE_READER_PREFIX + "webapp.address"; + public static final String DEFAULT_TIMELINE_SERVICE_READER_WEBAPP_ADDRESS = + DEFAULT_TIMELINE_SERVICE_WEBAPP_ADDRESS; + + public static final String TIMELINE_SERVICE_READER_WEBAPP_HTTPS_ADDRESS = + TIMELINE_SERVICE_READER_PREFIX + "webapp.https.address"; + public static final String + DEFAULT_TIMELINE_SERVICE_READER_WEBAPP_HTTPS_ADDRESS = + DEFAULT_TIMELINE_SERVICE_WEBAPP_HTTPS_ADDRESS; + + /** + * Marked collector properties as Private since it run as auxillary service. + */ + public static final String TIMELINE_SERVICE_COLLECTOR_PREFIX = + TIMELINE_SERVICE_PREFIX + "collector."; + + @Private + public static final String TIMELINE_SERVICE_COLLECTOR_BIND_HOST = + TIMELINE_SERVICE_COLLECTOR_PREFIX + "bind-host"; + public static final String DEFAULT_TIMELINE_SERVICE_COLLECTOR_BIND_HOST = + TIMELINE_SERVICE_BIND_HOST; + + @Private + public static final String TIMELINE_SERVICE_COLLECTOR_WEBAPP_ADDRESS = + TIMELINE_SERVICE_COLLECTOR_PREFIX + "webapp.address"; + public static final String DEFAULT_TIMELINE_SERVICE_COLLECTOR_WEBAPP_ADDRESS = + DEFAULT_TIMELINE_SERVICE_WEBAPP_ADDRESS; + + @Private + public static final String TIMELINE_SERVICE_COLLECTOR_WEBAPP_HTTPS_ADDRESS = + TIMELINE_SERVICE_COLLECTOR_PREFIX + "webapp.https.address"; + public static final String + DEFAULT_TIMELINE_SERVICE_COLLECTOR_WEBAPP_HTTPS_ADDRESS = + DEFAULT_TIMELINE_SERVICE_WEBAPP_HTTPS_ADDRESS; + public YarnConfiguration() { super(); } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/util/WebAppUtils.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/util/WebAppUtils.java index fb0a9bf533f..d7152468b62 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/util/WebAppUtils.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/util/WebAppUtils.java @@ -314,16 +314,37 @@ public static String getNMWebAppURLWithoutScheme(Configuration conf) { } public static String getAHSWebAppURLWithoutScheme(Configuration conf) { - return getTimelineReaderWebAppURL(conf); - } - - public static String getTimelineReaderWebAppURL(Configuration conf) { if (YarnConfiguration.useHttps(conf)) { return conf.get(YarnConfiguration.TIMELINE_SERVICE_WEBAPP_HTTPS_ADDRESS, - YarnConfiguration.DEFAULT_TIMELINE_SERVICE_WEBAPP_HTTPS_ADDRESS); + YarnConfiguration.DEFAULT_TIMELINE_SERVICE_WEBAPP_HTTPS_ADDRESS); } else { return conf.get(YarnConfiguration.TIMELINE_SERVICE_WEBAPP_ADDRESS, - YarnConfiguration.DEFAULT_TIMELINE_SERVICE_WEBAPP_ADDRESS); + YarnConfiguration.DEFAULT_TIMELINE_SERVICE_WEBAPP_ADDRESS); + } + } + + public static String getTimelineReaderWebAppURLWithoutScheme( + Configuration conf) { + if (YarnConfiguration.useHttps(conf)) { + return conf + .get(YarnConfiguration.TIMELINE_SERVICE_READER_WEBAPP_HTTPS_ADDRESS, + YarnConfiguration.DEFAULT_TIMELINE_SERVICE_READER_WEBAPP_HTTPS_ADDRESS); + } else { + return conf.get(YarnConfiguration.TIMELINE_SERVICE_READER_WEBAPP_ADDRESS, + YarnConfiguration.DEFAULT_TIMELINE_SERVICE_READER_WEBAPP_ADDRESS); + } + } + + public static String getTimelineCollectorWebAppURLWithoutScheme( + Configuration conf) { + if (YarnConfiguration.useHttps(conf)) { + return conf.get( + YarnConfiguration.TIMELINE_SERVICE_COLLECTOR_WEBAPP_HTTPS_ADDRESS, + YarnConfiguration.DEFAULT_TIMELINE_SERVICE_COLLECTOR_WEBAPP_HTTPS_ADDRESS); + } else { + return conf + .get(YarnConfiguration.TIMELINE_SERVICE_COLLECTOR_WEBAPP_ADDRESS, + YarnConfiguration.DEFAULT_TIMELINE_SERVICE_COLLECTOR_WEBAPP_ADDRESS); } } @@ -342,7 +363,7 @@ public static String getURLWithScheme(String schemePrefix, String url) { return schemePrefix + url; } } - + public static String getRunningLogURL( String nodeHttpAddress, String containerId, String user) { if (nodeHttpAddress == null || nodeHttpAddress.isEmpty() || 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 192f62e19e3..56bc47a11ae 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 @@ -3599,4 +3599,28 @@ 0,1 + + The http address of the timeline reader web application. + yarn.timeline-service.reader.webapp.address + ${yarn.timeline-service.webapp.address} + + + + The https address of the timeline reader web application. + yarn.timeline-service.reader.webapp.https.address + ${yarn.timeline-service.webapp.https.address} + + + + + The actual address the server will bind to. If this optional address is + set, the webapp servers will bind to this address and the port specified in + yarn.timeline-service.reader.webapp.address. + This is most useful for making the service listen to all interfaces by setting to + 0.0.0.0. + + yarn.timeline-service.reader.bind-host + + + diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-tests/src/test/java/org/apache/hadoop/yarn/server/timelineservice/security/TestTimelineAuthFilterForV2.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-tests/src/test/java/org/apache/hadoop/yarn/server/timelineservice/security/TestTimelineAuthFilterForV2.java index 75f17fb3967..bb511d8178a 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-tests/src/test/java/org/apache/hadoop/yarn/server/timelineservice/security/TestTimelineAuthFilterForV2.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-tests/src/test/java/org/apache/hadoop/yarn/server/timelineservice/security/TestTimelineAuthFilterForV2.java @@ -162,7 +162,8 @@ public static void setup() { conf.setFloat(YarnConfiguration.TIMELINE_SERVICE_VERSION, 2.0f); conf.setClass(YarnConfiguration.TIMELINE_SERVICE_WRITER_CLASS, FileSystemTimelineWriterImpl.class, TimelineWriter.class); - conf.set(YarnConfiguration.TIMELINE_SERVICE_BIND_HOST, "localhost"); + conf.set(YarnConfiguration.TIMELINE_SERVICE_READER_BIND_HOST, + "localhost"); conf.set(FileSystemTimelineWriterImpl.TIMELINE_SERVICE_STORAGE_DIR_ROOT, TEST_ROOT_DIR.getAbsolutePath()); conf.set("hadoop.proxyuser.HTTP.hosts", "*"); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice-hbase-tests/src/test/java/org/apache/hadoop/yarn/server/timelineservice/reader/AbstractTimelineReaderHBaseTestBase.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice-hbase-tests/src/test/java/org/apache/hadoop/yarn/server/timelineservice/reader/AbstractTimelineReaderHBaseTestBase.java index 3519c3f3bf2..471fb6c36f3 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice-hbase-tests/src/test/java/org/apache/hadoop/yarn/server/timelineservice/reader/AbstractTimelineReaderHBaseTestBase.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice-hbase-tests/src/test/java/org/apache/hadoop/yarn/server/timelineservice/reader/AbstractTimelineReaderHBaseTestBase.java @@ -79,7 +79,7 @@ protected static void initialize() throws Exception { Configuration config = util.getConfiguration(); config.setBoolean(YarnConfiguration.TIMELINE_SERVICE_ENABLED, true); config.setFloat(YarnConfiguration.TIMELINE_SERVICE_VERSION, 2.0f); - config.set(YarnConfiguration.TIMELINE_SERVICE_WEBAPP_ADDRESS, + config.set(YarnConfiguration.TIMELINE_SERVICE_READER_WEBAPP_ADDRESS, "localhost:0"); config.set(YarnConfiguration.RM_CLUSTER_ID, "cluster1"); config.set(YarnConfiguration.TIMELINE_SERVICE_READER_CLASS, diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/main/java/org/apache/hadoop/yarn/server/timelineservice/collector/NodeTimelineCollectorManager.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/main/java/org/apache/hadoop/yarn/server/timelineservice/collector/NodeTimelineCollectorManager.java index 68a68f0ded5..c8dbd596e49 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/main/java/org/apache/hadoop/yarn/server/timelineservice/collector/NodeTimelineCollectorManager.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/main/java/org/apache/hadoop/yarn/server/timelineservice/collector/NodeTimelineCollectorManager.java @@ -91,6 +91,8 @@ static final String COLLECTOR_MANAGER_ATTR_KEY = "collector.manager"; + private String webAppURLWithoutScheme; + @VisibleForTesting protected NodeTimelineCollectorManager() { this(true); @@ -109,6 +111,8 @@ protected void serviceInit(Configuration conf) throws Exception { tokenRenewInterval = conf.getLong( YarnConfiguration.TIMELINE_DELEGATION_TOKEN_RENEW_INTERVAL, YarnConfiguration.DEFAULT_TIMELINE_DELEGATION_TOKEN_RENEW_INTERVAL); + webAppURLWithoutScheme = + WebAppUtils.getTimelineCollectorWebAppURLWithoutScheme(conf); super.serviceInit(conf); } @@ -145,10 +149,7 @@ protected void serviceStart() throws Exception { private void doSecureLogin() throws IOException { Configuration conf = getConfig(); - InetSocketAddress addr = NetUtils.createSocketAddr(conf.getTrimmed( - YarnConfiguration.TIMELINE_SERVICE_BIND_HOST, - YarnConfiguration.DEFAULT_TIMELINE_SERVICE_BIND_HOST), 0, - YarnConfiguration.TIMELINE_SERVICE_BIND_HOST); + InetSocketAddress addr = NetUtils.createSocketAddr(webAppURLWithoutScheme); SecurityUtil.login(conf, YarnConfiguration.TIMELINE_SERVICE_KEYTAB, YarnConfiguration.TIMELINE_SERVICE_PRINCIPAL, addr.getHostName()); } @@ -277,8 +278,10 @@ private void startWebApp() { initializers, defaultInitializers, tokenMgrService); TimelineServerUtils.setTimelineFilters( conf, initializers, defaultInitializers); - String bindAddress = conf.get(YarnConfiguration.TIMELINE_SERVICE_BIND_HOST, - YarnConfiguration.DEFAULT_TIMELINE_SERVICE_BIND_HOST) + ":0"; + String bindAddress = + conf.get(YarnConfiguration.TIMELINE_SERVICE_COLLECTOR_BIND_HOST, + YarnConfiguration.DEFAULT_TIMELINE_SERVICE_COLLECTOR_BIND_HOST) + + ":0"; try { HttpServer2.Builder builder = new HttpServer2.Builder() .setName("timeline") diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/main/java/org/apache/hadoop/yarn/server/timelineservice/reader/TimelineReaderServer.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/main/java/org/apache/hadoop/yarn/server/timelineservice/reader/TimelineReaderServer.java index 5c049eaac90..79a1087f3c5 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/main/java/org/apache/hadoop/yarn/server/timelineservice/reader/TimelineReaderServer.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/main/java/org/apache/hadoop/yarn/server/timelineservice/reader/TimelineReaderServer.java @@ -28,6 +28,7 @@ import org.apache.hadoop.classification.InterfaceStability.Unstable; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.http.HttpServer2; +import org.apache.hadoop.net.NetUtils; import org.apache.hadoop.security.HttpCrossOriginFilterInitializer; import org.apache.hadoop.security.SecurityUtil; import org.apache.hadoop.service.CompositeService; @@ -63,6 +64,8 @@ private HttpServer2 readerWebServer; private TimelineReaderManager timelineReaderManager; + private String webAppURLWithoutScheme; + public TimelineReaderServer() { super(TimelineReaderServer.class.getName()); @@ -73,10 +76,10 @@ protected void serviceInit(Configuration conf) throws Exception { if (!YarnConfiguration.timelineServiceV2Enabled(conf)) { throw new YarnException("timeline service v.2 is not enabled"); } - InetSocketAddress bindAddr = conf.getSocketAddr( - YarnConfiguration.TIMELINE_SERVICE_ADDRESS, - YarnConfiguration.DEFAULT_TIMELINE_SERVICE_ADDRESS, - YarnConfiguration.DEFAULT_TIMELINE_SERVICE_PORT); + webAppURLWithoutScheme = + WebAppUtils.getTimelineReaderWebAppURLWithoutScheme(conf); + InetSocketAddress bindAddr = + NetUtils.createSocketAddr(webAppURLWithoutScheme); // Login from keytab if security is enabled. try { SecurityUtil.login(conf, YarnConfiguration.TIMELINE_SERVICE_KEYTAB, @@ -170,9 +173,9 @@ protected void addFilters(Configuration conf) { private void startTimelineReaderWebApp() { Configuration conf = getConfig(); addFilters(conf); - String bindAddress = WebAppUtils.getWebAppBindURL(conf, - YarnConfiguration.TIMELINE_SERVICE_BIND_HOST, - WebAppUtils.getTimelineReaderWebAppURL(conf)); + String bindAddress = WebAppUtils + .getWebAppBindURL(conf, YarnConfiguration.TIMELINE_SERVICE_READER_BIND_HOST, + webAppURLWithoutScheme); LOG.info("Instantiating TimelineReaderWebApp at " + bindAddress); try { HttpServer2.Builder builder = new HttpServer2.Builder() diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/test/java/org/apache/hadoop/yarn/server/timelineservice/reader/TestTimelineReaderServer.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/test/java/org/apache/hadoop/yarn/server/timelineservice/reader/TestTimelineReaderServer.java index bb96f37bc4e..6fc46cc7b03 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/test/java/org/apache/hadoop/yarn/server/timelineservice/reader/TestTimelineReaderServer.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/test/java/org/apache/hadoop/yarn/server/timelineservice/reader/TestTimelineReaderServer.java @@ -37,7 +37,7 @@ public void testStartStopServer() throws Exception { Configuration config = new YarnConfiguration(); config.setBoolean(YarnConfiguration.TIMELINE_SERVICE_ENABLED, true); config.setFloat(YarnConfiguration.TIMELINE_SERVICE_VERSION, 2.0f); - config.set(YarnConfiguration.TIMELINE_SERVICE_WEBAPP_ADDRESS, + config.set(YarnConfiguration.TIMELINE_SERVICE_READER_WEBAPP_ADDRESS, "localhost:0"); config.setClass(YarnConfiguration.TIMELINE_SERVICE_READER_CLASS, FileSystemTimelineReaderImpl.class, TimelineReader.class); @@ -61,7 +61,7 @@ public void testTimelineReaderServerWithInvalidTimelineReader() { Configuration conf = new YarnConfiguration(); conf.setBoolean(YarnConfiguration.TIMELINE_SERVICE_ENABLED, true); conf.setFloat(YarnConfiguration.TIMELINE_SERVICE_VERSION, 2.0f); - conf.set(YarnConfiguration.TIMELINE_SERVICE_WEBAPP_ADDRESS, + conf.set(YarnConfiguration.TIMELINE_SERVICE_READER_WEBAPP_ADDRESS, "localhost:0"); conf.set(YarnConfiguration.TIMELINE_SERVICE_READER_CLASS, Object.class.getName()); @@ -75,7 +75,7 @@ public void testTimelineReaderServerWithNonexistentTimelineReader() { Configuration conf = new YarnConfiguration(); conf.setBoolean(YarnConfiguration.TIMELINE_SERVICE_ENABLED, true); conf.setFloat(YarnConfiguration.TIMELINE_SERVICE_VERSION, 2.0f); - conf.set(YarnConfiguration.TIMELINE_SERVICE_WEBAPP_ADDRESS, + conf.set(YarnConfiguration.TIMELINE_SERVICE_READER_WEBAPP_ADDRESS, "localhost:0"); conf.set(YarnConfiguration.TIMELINE_SERVICE_READER_CLASS, nonexistentTimelineReaderClass); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/test/java/org/apache/hadoop/yarn/server/timelineservice/reader/TestTimelineReaderWebServices.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/test/java/org/apache/hadoop/yarn/server/timelineservice/reader/TestTimelineReaderWebServices.java index f760834bd57..03939ada8a5 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/test/java/org/apache/hadoop/yarn/server/timelineservice/reader/TestTimelineReaderWebServices.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-timelineservice/src/test/java/org/apache/hadoop/yarn/server/timelineservice/reader/TestTimelineReaderWebServices.java @@ -84,7 +84,7 @@ public void init() throws Exception { Configuration config = new YarnConfiguration(); config.setBoolean(YarnConfiguration.TIMELINE_SERVICE_ENABLED, true); config.setFloat(YarnConfiguration.TIMELINE_SERVICE_VERSION, 2.0f); - config.set(YarnConfiguration.TIMELINE_SERVICE_WEBAPP_ADDRESS, + config.set(YarnConfiguration.TIMELINE_SERVICE_READER_WEBAPP_ADDRESS, "localhost:0"); config.set(YarnConfiguration.RM_CLUSTER_ID, "cluster1"); config.setClass(YarnConfiguration.TIMELINE_SERVICE_READER_CLASS, diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-site/src/site/markdown/TimelineServiceV2.md b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-site/src/site/markdown/TimelineServiceV2.md index 7c51ce05f5b..b3100003297 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-site/src/site/markdown/TimelineServiceV2.md +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-site/src/site/markdown/TimelineServiceV2.md @@ -133,9 +133,9 @@ New configuration parameters that are introduced with v.2 are marked bold. | Configuration Property | Description | |:---- |:---- | | `yarn.timeline-service.hostname` | The hostname of the Timeline service web application. Defaults to `0.0.0.0` | -| `yarn.timeline-service.address` | Address for the Timeline server to start the RPC server. Defaults to `${yarn.timeline-service.hostname}:10200`. | -| `yarn.timeline-service.webapp.address` | The http address of the Timeline service web application. Defaults to `${yarn.timeline-service.hostname}:8188`. | -| `yarn.timeline-service.webapp.https.address` | The https address of the Timeline service web application. Defaults to `${yarn.timeline-service.hostname}:8190`. | +| `yarn.timeline-service.reader.webapp.address` | The http address of the Timeline Reader web application. Defaults to `${yarn.timeline-service.hostname}:8188`. | +| `yarn.timeline-service.reader.webapp.https.address` | The https address of the Timeline Reader web application. Defaults to `${yarn.timeline-service.hostname}:8190`. | +| `yarn.timeline-service.reader.webapp.bind-host` | The actual address the timeline reader will bind to. If this optional address is set, webapp servers will bind to this address and the port specified in yarn.timeline-service.reader.webapp.address. This is most useful for making the service listen on all interfaces by setting to 0.0.0.0. | | **`yarn.timeline-service.hbase.configuration.file`** | Optional URL to an hbase-site.xml configuration file to be used to connect to the timeline-service hbase cluster. If empty or not specified, then the HBase configuration will be loaded from the classpath. When specified the values in the specified configuration file will override those from the ones that are present on the classpath. Defaults to `null`. | | **`yarn.timeline-service.writer.flush-interval-seconds`** | The setting that controls how often the timeline collector flushes the timeline writer. Defaults to `60`. | | **`yarn.timeline-service.app-collector.linger-period.ms`** | Time period till which the application collector will be alive in NM, after the application master container finishes. Defaults to `1000` (1 second). |