YARN-1204. Added separate configuration properties for https for RM and NM without which servers enabled with https will also start on http ports. Contributed by Omkar Vinit Joshi.
MAPREDUCE-5523. Added separate configuration properties for https for JHS without which even when https is enabled, it starts on http port itself. Contributed by Omkar Vinit Joshi. git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1525947 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
5827d1667c
commit
78e995a37d
@ -221,6 +221,10 @@ Release 2.1.1-beta - 2013-09-23
|
||||
|
||||
MAPREDUCE-5379. Include token tracking ids in jobconf. (kkambatl via tucu)
|
||||
|
||||
MAPREDUCE-5523. Added separate configuration properties for https for JHS
|
||||
without which even when https is enabled, it starts on http port itself.
|
||||
(Omkar Vinit Joshi via vinodkv)
|
||||
|
||||
OPTIMIZATIONS
|
||||
|
||||
MAPREDUCE-5446. TestJobHistoryEvents and TestJobHistoryParsing have race
|
||||
|
@ -37,11 +37,11 @@
|
||||
import org.apache.hadoop.mapreduce.v2.app.webapp.dao.AppInfo;
|
||||
import org.apache.hadoop.mapreduce.v2.util.MRApps;
|
||||
import org.apache.hadoop.security.UserGroupInformation;
|
||||
import org.apache.hadoop.yarn.conf.YarnConfiguration;
|
||||
import org.apache.hadoop.yarn.util.StringHelper;
|
||||
import org.apache.hadoop.yarn.util.Times;
|
||||
import org.apache.hadoop.yarn.webapp.Controller;
|
||||
import org.apache.hadoop.yarn.webapp.View;
|
||||
import org.apache.hadoop.yarn.webapp.util.WebAppUtils;
|
||||
|
||||
import com.google.common.base.Joiner;
|
||||
import com.google.inject.Inject;
|
||||
@ -62,7 +62,7 @@ protected AppController(App app, Configuration conf, RequestContext ctx,
|
||||
set(APP_ID, app.context.getApplicationID().toString());
|
||||
set(RM_WEB,
|
||||
JOINER.join(WebAppUtil.getSchemePrefix(),
|
||||
YarnConfiguration.getRMWebAppHostAndPort(conf)));
|
||||
WebAppUtils.getResolvedRMWebAppURLWithoutScheme(conf)));
|
||||
}
|
||||
|
||||
@Inject
|
||||
|
@ -17,6 +17,10 @@
|
||||
*/
|
||||
package org.apache.hadoop.mapreduce.v2.app.webapp;
|
||||
|
||||
import org.apache.hadoop.conf.Configuration;
|
||||
import org.apache.hadoop.http.HttpConfig;
|
||||
import org.apache.hadoop.mapreduce.v2.jobhistory.JHAdminConfig;
|
||||
|
||||
|
||||
public class WebAppUtil {
|
||||
private static boolean isSSLEnabledInYARN;
|
||||
@ -36,4 +40,21 @@ public static String getSchemePrefix() {
|
||||
return "http://";
|
||||
}
|
||||
}
|
||||
|
||||
public static void setJHSWebAppURLWithoutScheme(Configuration conf,
|
||||
String hostAddress) {
|
||||
if (HttpConfig.isSecure()) {
|
||||
conf.set(JHAdminConfig.MR_HISTORY_WEBAPP_HTTPS_ADDRESS, hostAddress);
|
||||
} else {
|
||||
conf.set(JHAdminConfig.MR_HISTORY_WEBAPP_ADDRESS, hostAddress);
|
||||
}
|
||||
}
|
||||
|
||||
public static String getJHSWebAppURLWithoutScheme(Configuration conf) {
|
||||
if (HttpConfig.isSecure()) {
|
||||
return conf.get(JHAdminConfig.MR_HISTORY_WEBAPP_HTTPS_ADDRESS);
|
||||
} else {
|
||||
return conf.get(JHAdminConfig.MR_HISTORY_WEBAPP_ADDRESS);
|
||||
}
|
||||
}
|
||||
}
|
@ -18,8 +18,15 @@
|
||||
|
||||
package org.apache.hadoop.mapreduce.v2.jobhistory;
|
||||
|
||||
import java.net.InetAddress;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.UnknownHostException;
|
||||
|
||||
import org.apache.hadoop.classification.InterfaceAudience;
|
||||
import org.apache.hadoop.classification.InterfaceStability;
|
||||
import org.apache.hadoop.conf.Configuration;
|
||||
import org.apache.hadoop.http.HttpConfig;
|
||||
import org.apache.hadoop.net.NetUtils;
|
||||
|
||||
/**
|
||||
* Stores Job History configuration keys that can be set by administrators of
|
||||
@ -130,6 +137,13 @@ public class JHAdminConfig {
|
||||
public static final String DEFAULT_MR_HISTORY_WEBAPP_ADDRESS =
|
||||
"0.0.0.0:" + DEFAULT_MR_HISTORY_WEBAPP_PORT;
|
||||
|
||||
/**The https address the history server webapp is on.*/
|
||||
public static final String MR_HISTORY_WEBAPP_HTTPS_ADDRESS =
|
||||
MR_HISTORY_PREFIX + "webapp.https.address";
|
||||
public static final int DEFAULT_MR_HISTORY_WEBAPP_HTTPS_PORT = 19890;
|
||||
public static final String DEFAULT_MR_HISTORY_WEBAPP_HTTPS_ADDRESS =
|
||||
"0.0.0.0:" + DEFAULT_MR_HISTORY_WEBAPP_HTTPS_PORT;
|
||||
|
||||
/**The kerberos principal to be used for spnego filter for history server*/
|
||||
public static final String MR_WEBAPP_SPNEGO_USER_NAME_KEY =
|
||||
MR_HISTORY_PREFIX + "webapp.spnego-principal";
|
||||
@ -160,4 +174,36 @@ public class JHAdminConfig {
|
||||
*/
|
||||
public static boolean DEFAULT_MR_HISTORY_MINICLUSTER_FIXED_PORTS = false;
|
||||
|
||||
public static String getResolvedMRHistoryWebAppURLWithoutScheme(
|
||||
Configuration conf) {
|
||||
InetSocketAddress address = null;
|
||||
if (HttpConfig.isSecure()) {
|
||||
address =
|
||||
conf.getSocketAddr(JHAdminConfig.MR_HISTORY_WEBAPP_HTTPS_ADDRESS,
|
||||
JHAdminConfig.DEFAULT_MR_HISTORY_WEBAPP_HTTPS_ADDRESS,
|
||||
JHAdminConfig.DEFAULT_MR_HISTORY_WEBAPP_HTTPS_PORT);
|
||||
} else {
|
||||
address =
|
||||
conf.getSocketAddr(JHAdminConfig.MR_HISTORY_WEBAPP_ADDRESS,
|
||||
JHAdminConfig.DEFAULT_MR_HISTORY_WEBAPP_ADDRESS,
|
||||
JHAdminConfig.DEFAULT_MR_HISTORY_WEBAPP_PORT); }
|
||||
address = NetUtils.getConnectAddress(address);
|
||||
StringBuffer sb = new StringBuffer();
|
||||
InetAddress resolved = address.getAddress();
|
||||
if (resolved == null || resolved.isAnyLocalAddress() ||
|
||||
resolved.isLoopbackAddress()) {
|
||||
String lh = address.getHostName();
|
||||
try {
|
||||
lh = InetAddress.getLocalHost().getCanonicalHostName();
|
||||
} catch (UnknownHostException e) {
|
||||
//Ignore and fallback.
|
||||
}
|
||||
sb.append(lh);
|
||||
} else {
|
||||
sb.append(address.getHostName());
|
||||
}
|
||||
sb.append(":").append(address.getPort());
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -28,10 +28,12 @@
|
||||
import org.apache.hadoop.fs.FileContext;
|
||||
import org.apache.hadoop.fs.LocalFileSystem;
|
||||
import org.apache.hadoop.fs.Path;
|
||||
import org.apache.hadoop.http.HttpConfig;
|
||||
import org.apache.hadoop.mapred.LocalContainerLauncher;
|
||||
import org.apache.hadoop.mapred.ShuffleHandler;
|
||||
import org.apache.hadoop.mapreduce.MRConfig;
|
||||
import org.apache.hadoop.mapreduce.MRJobConfig;
|
||||
import org.apache.hadoop.mapreduce.v2.app.webapp.WebAppUtil;
|
||||
import org.apache.hadoop.mapreduce.v2.hs.JobHistoryServer;
|
||||
import org.apache.hadoop.mapreduce.v2.jobhistory.JHAdminConfig;
|
||||
import org.apache.hadoop.mapreduce.v2.jobhistory.JobHistoryUtils;
|
||||
@ -43,6 +45,8 @@
|
||||
import org.apache.hadoop.yarn.server.MiniYARNCluster;
|
||||
import org.apache.hadoop.yarn.server.nodemanager.ContainerExecutor;
|
||||
import org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor;
|
||||
import org.apache.hadoop.yarn.webapp.util.WebAppUtils;
|
||||
import org.hamcrest.core.IsEqual;
|
||||
|
||||
/**
|
||||
* Configures and starts the MR-specific components in the YARN cluster.
|
||||
@ -155,8 +159,7 @@ public synchronized void serviceStart() throws Exception {
|
||||
// pick free random ports.
|
||||
getConfig().set(JHAdminConfig.MR_HISTORY_ADDRESS,
|
||||
hostname + ":0");
|
||||
getConfig().set(JHAdminConfig.MR_HISTORY_WEBAPP_ADDRESS,
|
||||
hostname + ":0");
|
||||
WebAppUtil.setJHSWebAppURLWithoutScheme(getConfig(), hostname + ":0");
|
||||
getConfig().set(JHAdminConfig.JHS_ADMIN_ADDRESS,
|
||||
hostname + ":0");
|
||||
}
|
||||
@ -182,17 +185,17 @@ public void run() {
|
||||
//need to do this because historyServer.init creates a new Configuration
|
||||
getConfig().set(JHAdminConfig.MR_HISTORY_ADDRESS,
|
||||
historyServer.getConfig().get(JHAdminConfig.MR_HISTORY_ADDRESS));
|
||||
getConfig().set(JHAdminConfig.MR_HISTORY_WEBAPP_ADDRESS,
|
||||
historyServer.getConfig().get(JHAdminConfig.MR_HISTORY_WEBAPP_ADDRESS));
|
||||
WebAppUtil.setJHSWebAppURLWithoutScheme(getConfig(),
|
||||
WebAppUtil.getJHSWebAppURLWithoutScheme(historyServer.getConfig()));
|
||||
|
||||
LOG.info("MiniMRYARN ResourceManager address: " +
|
||||
getConfig().get(YarnConfiguration.RM_ADDRESS));
|
||||
LOG.info("MiniMRYARN ResourceManager web address: " +
|
||||
getConfig().get(YarnConfiguration.RM_WEBAPP_ADDRESS));
|
||||
WebAppUtils.getRMWebAppURLWithoutScheme(getConfig()));
|
||||
LOG.info("MiniMRYARN HistoryServer address: " +
|
||||
getConfig().get(JHAdminConfig.MR_HISTORY_ADDRESS));
|
||||
LOG.info("MiniMRYARN HistoryServer web address: " +
|
||||
getConfig().get(JHAdminConfig.MR_HISTORY_WEBAPP_ADDRESS));
|
||||
JHAdminConfig.getResolvedMRHistoryWebAppURLWithoutScheme(getConfig()));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -135,6 +135,10 @@ Release 2.1.1-beta - 2013-09-23
|
||||
YARN-1203. Changed YARN web-app proxy to handle http and https URLs from
|
||||
AM registration and finish correctly. (Omkar Vinit Joshi via vinodkv)
|
||||
|
||||
YARN-1204. Added separate configuration properties for https for RM and NM
|
||||
without which servers enabled with https will also start on http ports.
|
||||
(Omkar Vinit Joshi via vinodkv)
|
||||
|
||||
OPTIMIZATIONS
|
||||
|
||||
BUG FIXES
|
||||
|
@ -26,20 +26,15 @@
|
||||
import org.apache.hadoop.classification.InterfaceAudience.Public;
|
||||
import org.apache.hadoop.classification.InterfaceStability.Evolving;
|
||||
import org.apache.hadoop.conf.Configuration;
|
||||
import org.apache.hadoop.fs.CommonConfigurationKeysPublic;
|
||||
import org.apache.hadoop.http.HttpConfig;
|
||||
import org.apache.hadoop.net.NetUtils;
|
||||
import org.apache.hadoop.util.StringUtils;
|
||||
import org.apache.hadoop.yarn.api.ApplicationConstants;
|
||||
|
||||
import com.google.common.base.Joiner;
|
||||
|
||||
@Public
|
||||
@Evolving
|
||||
public class YarnConfiguration extends Configuration {
|
||||
|
||||
private static final Joiner JOINER = Joiner.on("");
|
||||
|
||||
private static final String YARN_DEFAULT_XML_FILE = "yarn-default.xml";
|
||||
private static final String YARN_SITE_XML_FILE = "yarn-site.xml";
|
||||
|
||||
@ -163,6 +158,14 @@ public class YarnConfiguration extends Configuration {
|
||||
public static final String DEFAULT_RM_WEBAPP_ADDRESS = "0.0.0.0:" +
|
||||
DEFAULT_RM_WEBAPP_PORT;
|
||||
|
||||
/** The https address of the RM web application.*/
|
||||
public static final String RM_WEBAPP_HTTPS_ADDRESS =
|
||||
RM_PREFIX + "webapp.https.address";
|
||||
|
||||
public static final int DEFAULT_RM_WEBAPP_HTTPS_PORT = 8090;
|
||||
public static final String DEFAULT_RM_WEBAPP_HTTPS_ADDRESS = "0.0.0.0:"
|
||||
+ DEFAULT_RM_WEBAPP_HTTPS_PORT;
|
||||
|
||||
public static final String RM_RESOURCE_TRACKER_ADDRESS =
|
||||
RM_PREFIX + "resource-tracker.address";
|
||||
public static final int DEFAULT_RM_RESOURCE_TRACKER_PORT = 8031;
|
||||
@ -548,6 +551,13 @@ public class YarnConfiguration extends Configuration {
|
||||
public static final String DEFAULT_NM_WEBAPP_ADDRESS = "0.0.0.0:" +
|
||||
DEFAULT_NM_WEBAPP_PORT;
|
||||
|
||||
/** NM Webapp https address.**/
|
||||
public static final String NM_WEBAPP_HTTPS_ADDRESS = NM_PREFIX
|
||||
+ "webapp.https.address";
|
||||
public static final int DEFAULT_NM_WEBAPP_HTTPS_PORT = 8044;
|
||||
public static final String DEFAULT_NM_WEBAPP_HTTPS_ADDRESS = "0.0.0.0:"
|
||||
+ DEFAULT_NM_WEBAPP_HTTPS_PORT;
|
||||
|
||||
/** How often to monitor containers.*/
|
||||
public final static String NM_CONTAINER_MON_INTERVAL_MS =
|
||||
NM_PREFIX + "container-monitor.interval-ms";
|
||||
@ -833,42 +843,4 @@ public YarnConfiguration(Configuration conf) {
|
||||
this.reloadConfiguration();
|
||||
}
|
||||
}
|
||||
|
||||
public static String getProxyHostAndPort(Configuration conf) {
|
||||
String addr = conf.get(PROXY_ADDRESS);
|
||||
if(addr == null || addr.isEmpty()) {
|
||||
addr = getRMWebAppHostAndPort(conf);
|
||||
}
|
||||
return addr;
|
||||
}
|
||||
|
||||
public static String getRMWebAppHostAndPort(Configuration conf) {
|
||||
InetSocketAddress address = conf.getSocketAddr(
|
||||
YarnConfiguration.RM_WEBAPP_ADDRESS,
|
||||
YarnConfiguration.DEFAULT_RM_WEBAPP_ADDRESS,
|
||||
YarnConfiguration.DEFAULT_RM_WEBAPP_PORT);
|
||||
address = NetUtils.getConnectAddress(address);
|
||||
StringBuffer sb = new StringBuffer();
|
||||
InetAddress resolved = address.getAddress();
|
||||
if (resolved == null || resolved.isAnyLocalAddress() ||
|
||||
resolved.isLoopbackAddress()) {
|
||||
String lh = address.getHostName();
|
||||
try {
|
||||
lh = InetAddress.getLocalHost().getCanonicalHostName();
|
||||
} catch (UnknownHostException e) {
|
||||
//Ignore and fallback.
|
||||
}
|
||||
sb.append(lh);
|
||||
} else {
|
||||
sb.append(address.getHostName());
|
||||
}
|
||||
sb.append(":").append(address.getPort());
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public static String getRMWebAppURL(Configuration conf) {
|
||||
return JOINER.join(HttpConfig.getSchemePrefix(),
|
||||
getRMWebAppHostAndPort(conf));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,141 @@
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.hadoop.yarn.webapp.util;
|
||||
|
||||
import java.net.InetAddress;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.UnknownHostException;
|
||||
|
||||
import org.apache.hadoop.classification.InterfaceAudience.Private;
|
||||
import org.apache.hadoop.classification.InterfaceStability.Evolving;
|
||||
import org.apache.hadoop.conf.Configuration;
|
||||
import org.apache.hadoop.http.HttpConfig;
|
||||
import org.apache.hadoop.net.NetUtils;
|
||||
import org.apache.hadoop.yarn.conf.YarnConfiguration;
|
||||
|
||||
import com.google.common.base.Joiner;
|
||||
|
||||
@Private
|
||||
@Evolving
|
||||
public class WebAppUtils {
|
||||
private static final Joiner JOINER = Joiner.on("");
|
||||
|
||||
public static void setRMWebAppPort(Configuration conf, int port) {
|
||||
String hostname = getRMWebAppURLWithoutScheme(conf);
|
||||
hostname =
|
||||
(hostname.contains(":")) ? hostname.substring(0, hostname.indexOf(":"))
|
||||
: hostname;
|
||||
setRMWebAppHostnameAndPort(conf, hostname, port);
|
||||
}
|
||||
|
||||
public static void setRMWebAppHostnameAndPort(Configuration conf,
|
||||
String hostname, int port) {
|
||||
String resolvedAddress = hostname + ":" + port;
|
||||
if (HttpConfig.isSecure()) {
|
||||
conf.set(YarnConfiguration.RM_WEBAPP_HTTPS_ADDRESS, resolvedAddress);
|
||||
} else {
|
||||
conf.set(YarnConfiguration.RM_WEBAPP_ADDRESS, resolvedAddress);
|
||||
}
|
||||
}
|
||||
|
||||
public static void setNMWebAppHostNameAndPort(Configuration conf,
|
||||
String hostName, int port) {
|
||||
if (HttpConfig.isSecure()) {
|
||||
conf.set(YarnConfiguration.NM_WEBAPP_HTTPS_ADDRESS,
|
||||
hostName + ":" + port);
|
||||
} else {
|
||||
conf.set(YarnConfiguration.NM_WEBAPP_ADDRESS,
|
||||
hostName + ":" + port);
|
||||
}
|
||||
}
|
||||
|
||||
public static String getRMWebAppURLWithScheme(Configuration conf) {
|
||||
return JOINER.join(HttpConfig.getSchemePrefix(),
|
||||
HttpConfig.isSecure() ? conf.get(
|
||||
YarnConfiguration.RM_WEBAPP_HTTPS_ADDRESS,
|
||||
YarnConfiguration.DEFAULT_RM_WEBAPP_HTTPS_ADDRESS) : conf.get(
|
||||
YarnConfiguration.RM_WEBAPP_ADDRESS,
|
||||
YarnConfiguration.DEFAULT_RM_WEBAPP_ADDRESS));
|
||||
}
|
||||
|
||||
public static String getRMWebAppURLWithoutScheme(Configuration conf) {
|
||||
if (HttpConfig.isSecure()) {
|
||||
return conf.get(YarnConfiguration.RM_WEBAPP_HTTPS_ADDRESS,
|
||||
YarnConfiguration.DEFAULT_RM_WEBAPP_HTTPS_ADDRESS);
|
||||
}else {
|
||||
return conf.get(YarnConfiguration.RM_WEBAPP_ADDRESS,
|
||||
YarnConfiguration.DEFAULT_RM_WEBAPP_ADDRESS);
|
||||
}
|
||||
}
|
||||
|
||||
public static String getProxyHostAndPort(Configuration conf) {
|
||||
String addr = conf.get(YarnConfiguration.PROXY_ADDRESS);
|
||||
if(addr == null || addr.isEmpty()) {
|
||||
addr = getResolvedRMWebAppURLWithoutScheme(conf);
|
||||
}
|
||||
return addr;
|
||||
}
|
||||
|
||||
public static String getResolvedRMWebAppURLWithScheme(Configuration conf) {
|
||||
return HttpConfig.getSchemePrefix()
|
||||
+ getResolvedRMWebAppURLWithoutScheme(conf);
|
||||
}
|
||||
|
||||
public static String getResolvedRMWebAppURLWithoutScheme(Configuration conf) {
|
||||
InetSocketAddress address = null;
|
||||
if (HttpConfig.isSecure()) {
|
||||
address =
|
||||
conf.getSocketAddr(YarnConfiguration.RM_WEBAPP_HTTPS_ADDRESS,
|
||||
YarnConfiguration.DEFAULT_RM_WEBAPP_HTTPS_ADDRESS,
|
||||
YarnConfiguration.DEFAULT_RM_WEBAPP_HTTPS_PORT);
|
||||
} else {
|
||||
address =
|
||||
conf.getSocketAddr(YarnConfiguration.RM_WEBAPP_ADDRESS,
|
||||
YarnConfiguration.DEFAULT_RM_WEBAPP_ADDRESS,
|
||||
YarnConfiguration.DEFAULT_RM_WEBAPP_PORT);
|
||||
}
|
||||
address = NetUtils.getConnectAddress(address);
|
||||
StringBuffer sb = new StringBuffer();
|
||||
InetAddress resolved = address.getAddress();
|
||||
if (resolved == null || resolved.isAnyLocalAddress() ||
|
||||
resolved.isLoopbackAddress()) {
|
||||
String lh = address.getHostName();
|
||||
try {
|
||||
lh = InetAddress.getLocalHost().getCanonicalHostName();
|
||||
} catch (UnknownHostException e) {
|
||||
//Ignore and fallback.
|
||||
}
|
||||
sb.append(lh);
|
||||
} else {
|
||||
sb.append(address.getHostName());
|
||||
}
|
||||
sb.append(":").append(address.getPort());
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public static String getNMWebAppURLWithoutScheme(Configuration conf) {
|
||||
if (HttpConfig.isSecure()) {
|
||||
return conf.get(YarnConfiguration.NM_WEBAPP_HTTPS_ADDRESS,
|
||||
YarnConfiguration.DEFAULT_NM_WEBAPP_HTTPS_ADDRESS);
|
||||
} else {
|
||||
return conf.get(YarnConfiguration.NM_WEBAPP_ADDRESS,
|
||||
YarnConfiguration.DEFAULT_NM_WEBAPP_ADDRESS);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -20,7 +20,7 @@
|
||||
|
||||
import junit.framework.Assert;
|
||||
|
||||
import org.apache.hadoop.yarn.conf.YarnConfiguration;
|
||||
import org.apache.hadoop.yarn.webapp.util.WebAppUtils;
|
||||
import org.junit.Test;
|
||||
|
||||
public class TestYarnConfiguration {
|
||||
@ -28,7 +28,7 @@ public class TestYarnConfiguration {
|
||||
@Test
|
||||
public void testDefaultRMWebUrl() throws Exception {
|
||||
YarnConfiguration conf = new YarnConfiguration();
|
||||
String rmWebUrl = YarnConfiguration.getRMWebAppURL(conf);
|
||||
String rmWebUrl = WebAppUtils.getRMWebAppURLWithScheme(conf);
|
||||
// shouldn't have a "/" on the end of the url as all the other uri routinnes
|
||||
// specifically add slashes and Jetty doesn't handle double slashes.
|
||||
Assert.assertNotSame("RM Web Url is not correct", "http://0.0.0.0:8088",
|
||||
@ -43,7 +43,7 @@ public void testRMWebUrlSpecified() throws Exception {
|
||||
// for host and use the port from the RM_WEBAPP_ADDRESS
|
||||
conf.set(YarnConfiguration.RM_WEBAPP_ADDRESS, "fortesting:24543");
|
||||
conf.set(YarnConfiguration.RM_ADDRESS, "rmtesting:9999");
|
||||
String rmWebUrl = YarnConfiguration.getRMWebAppURL(conf);
|
||||
String rmWebUrl = WebAppUtils.getRMWebAppURLWithScheme(conf);
|
||||
String[] parts = rmWebUrl.split(":");
|
||||
Assert.assertEquals("RM Web URL Port is incrrect", 24543,
|
||||
Integer.valueOf(parts[parts.length - 1]).intValue());
|
||||
|
@ -19,8 +19,9 @@
|
||||
package org.apache.hadoop.yarn.server.nodemanager.webapp;
|
||||
|
||||
import org.apache.hadoop.conf.Configuration;
|
||||
import org.apache.hadoop.yarn.conf.YarnConfiguration;
|
||||
import org.apache.hadoop.http.HttpConfig;
|
||||
import org.apache.hadoop.yarn.webapp.YarnWebParams;
|
||||
import org.apache.hadoop.yarn.webapp.util.WebAppUtils;
|
||||
import org.apache.hadoop.yarn.webapp.view.HtmlBlock;
|
||||
|
||||
import com.google.inject.Inject;
|
||||
@ -37,7 +38,8 @@ public NavBlock(Configuration conf) {
|
||||
@Override
|
||||
protected void render(Block html) {
|
||||
|
||||
String RMWebAppURL = YarnConfiguration.getRMWebAppURL(this.conf);
|
||||
String RMWebAppURL =
|
||||
WebAppUtils.getResolvedRMWebAppURLWithScheme(this.conf);
|
||||
html
|
||||
.div("#nav")
|
||||
.h3()._("ResourceManager")._()
|
||||
|
@ -22,7 +22,7 @@
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.apache.hadoop.conf.Configuration;
|
||||
import org.apache.hadoop.http.HttpConfig;
|
||||
import org.apache.hadoop.service.AbstractService;
|
||||
import org.apache.hadoop.yarn.conf.YarnConfiguration;
|
||||
import org.apache.hadoop.yarn.exceptions.YarnRuntimeException;
|
||||
@ -34,6 +34,7 @@
|
||||
import org.apache.hadoop.yarn.webapp.WebApp;
|
||||
import org.apache.hadoop.yarn.webapp.WebApps;
|
||||
import org.apache.hadoop.yarn.webapp.YarnWebParams;
|
||||
import org.apache.hadoop.yarn.webapp.util.WebAppUtils;
|
||||
|
||||
public class WebServer extends AbstractService {
|
||||
|
||||
@ -54,8 +55,8 @@ public WebServer(Context nmContext, ResourceView resourceView,
|
||||
|
||||
@Override
|
||||
protected void serviceStart() throws Exception {
|
||||
String bindAddress = getConfig().get(YarnConfiguration.NM_WEBAPP_ADDRESS,
|
||||
YarnConfiguration.DEFAULT_NM_WEBAPP_ADDRESS);
|
||||
String bindAddress = WebAppUtils.getNMWebAppURLWithoutScheme(getConfig());
|
||||
|
||||
LOG.info("Instantiating NMWebApp at " + bindAddress);
|
||||
try {
|
||||
this.webApp =
|
||||
|
@ -27,6 +27,7 @@
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.apache.hadoop.classification.InterfaceAudience.Private;
|
||||
import org.apache.hadoop.conf.Configuration;
|
||||
import org.apache.hadoop.http.HttpConfig;
|
||||
import org.apache.hadoop.metrics2.lib.DefaultMetricsSystem;
|
||||
import org.apache.hadoop.metrics2.source.JvmMetrics;
|
||||
import org.apache.hadoop.security.SecurityUtil;
|
||||
@ -88,6 +89,7 @@
|
||||
import org.apache.hadoop.yarn.webapp.WebApp;
|
||||
import org.apache.hadoop.yarn.webapp.WebApps;
|
||||
import org.apache.hadoop.yarn.webapp.WebApps.Builder;
|
||||
import org.apache.hadoop.yarn.webapp.util.WebAppUtils;
|
||||
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
|
||||
@ -441,12 +443,8 @@ protected void serviceStart() throws Exception {
|
||||
}
|
||||
|
||||
if (getConfig().getBoolean(YarnConfiguration.IS_MINI_YARN_CLUSTER, false)) {
|
||||
String hostname = getConfig().get(YarnConfiguration.RM_WEBAPP_ADDRESS,
|
||||
YarnConfiguration.DEFAULT_RM_WEBAPP_ADDRESS);
|
||||
hostname = (hostname.contains(":")) ? hostname.substring(0, hostname.indexOf(":")) : hostname;
|
||||
int port = webApp.port();
|
||||
String resolvedAddress = hostname + ":" + port;
|
||||
conf.set(YarnConfiguration.RM_WEBAPP_ADDRESS, resolvedAddress);
|
||||
WebAppUtils.setRMWebAppPort(conf, port);
|
||||
}
|
||||
|
||||
super.serviceStart();
|
||||
@ -704,10 +702,9 @@ protected void startWepApp() {
|
||||
YarnConfiguration.RM_WEBAPP_SPNEGO_USER_NAME_KEY)
|
||||
.withHttpSpnegoKeytabKey(
|
||||
YarnConfiguration.RM_WEBAPP_SPNEGO_KEYTAB_FILE_KEY)
|
||||
.at(this.conf.get(YarnConfiguration.RM_WEBAPP_ADDRESS,
|
||||
YarnConfiguration.DEFAULT_RM_WEBAPP_ADDRESS));
|
||||
String proxyHostAndPort = YarnConfiguration.getProxyHostAndPort(conf);
|
||||
if(YarnConfiguration.getRMWebAppHostAndPort(conf).
|
||||
.at(WebAppUtils.getRMWebAppURLWithoutScheme(conf));
|
||||
String proxyHostAndPort = WebAppUtils.getProxyHostAndPort(conf);
|
||||
if(WebAppUtils.getResolvedRMWebAppURLWithoutScheme(conf).
|
||||
equals(proxyHostAndPort)) {
|
||||
AppReportFetcher fetcher = new AppReportFetcher(conf, getClientRMService());
|
||||
builder.withServlet(ProxyUriUtils.PROXY_SERVLET_NAME,
|
||||
|
@ -57,7 +57,6 @@
|
||||
import org.apache.hadoop.yarn.api.records.Priority;
|
||||
import org.apache.hadoop.yarn.api.records.Resource;
|
||||
import org.apache.hadoop.yarn.api.records.ResourceRequest;
|
||||
import org.apache.hadoop.yarn.conf.YarnConfiguration;
|
||||
import org.apache.hadoop.yarn.event.EventHandler;
|
||||
import org.apache.hadoop.yarn.factories.RecordFactory;
|
||||
import org.apache.hadoop.yarn.factory.providers.RecordFactoryProvider;
|
||||
@ -100,6 +99,7 @@
|
||||
import org.apache.hadoop.yarn.state.StateMachine;
|
||||
import org.apache.hadoop.yarn.state.StateMachineFactory;
|
||||
import org.apache.hadoop.yarn.util.resource.Resources;
|
||||
import org.apache.hadoop.yarn.webapp.util.WebAppUtils;
|
||||
|
||||
@SuppressWarnings({"unchecked", "rawtypes"})
|
||||
public class RMAppAttemptImpl implements RMAppAttempt, Recoverable {
|
||||
@ -480,7 +480,7 @@ private String generateProxyUriWithoutScheme(
|
||||
try {
|
||||
URI trackingUri = StringUtils.isEmpty(trackingUriWithoutScheme) ? null :
|
||||
ProxyUriUtils.getUriFromAMUrl(trackingUriWithoutScheme);
|
||||
String proxy = YarnConfiguration.getProxyHostAndPort(conf);
|
||||
String proxy = WebAppUtils.getProxyHostAndPort(conf);
|
||||
URI proxyUri = ProxyUriUtils.getUriFromAMUrl(proxy);
|
||||
URI result = ProxyUriUtils.getProxyUri(trackingUri, proxyUri,
|
||||
applicationAttemptId.getApplicationId());
|
||||
@ -496,7 +496,7 @@ private String generateProxyUriWithoutScheme(
|
||||
|
||||
private void setTrackingUrlToRMAppPage() {
|
||||
origTrackingUrl = pjoin(
|
||||
YarnConfiguration.getRMWebAppHostAndPort(conf),
|
||||
WebAppUtils.getResolvedRMWebAppURLWithoutScheme(conf),
|
||||
"cluster", "app", getAppAttemptId().getApplicationId());
|
||||
proxiedTrackingUrl = origTrackingUrl;
|
||||
}
|
||||
|
@ -25,10 +25,10 @@
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.Matchers.any;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
import static org.mockito.Mockito.spy;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
@ -51,7 +51,6 @@
|
||||
import org.apache.hadoop.yarn.api.records.ContainerStatus;
|
||||
import org.apache.hadoop.yarn.api.records.FinalApplicationStatus;
|
||||
import org.apache.hadoop.yarn.api.records.Resource;
|
||||
import org.apache.hadoop.yarn.conf.YarnConfiguration;
|
||||
import org.apache.hadoop.yarn.event.AsyncDispatcher;
|
||||
import org.apache.hadoop.yarn.event.EventHandler;
|
||||
import org.apache.hadoop.yarn.event.InlineDispatcher;
|
||||
@ -83,9 +82,10 @@
|
||||
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.event.SchedulerEventType;
|
||||
import org.apache.hadoop.yarn.server.resourcemanager.security.AMRMTokenSecretManager;
|
||||
import org.apache.hadoop.yarn.server.resourcemanager.security.ClientToAMTokenSecretManagerInRM;
|
||||
import org.apache.hadoop.yarn.server.resourcemanager.security.NMTokenSecretManagerInRM;
|
||||
import org.apache.hadoop.yarn.server.resourcemanager.security.RMContainerTokenSecretManager;
|
||||
import org.apache.hadoop.yarn.server.utils.BuilderUtils;
|
||||
import org.apache.hadoop.yarn.server.resourcemanager.security.NMTokenSecretManagerInRM;
|
||||
import org.apache.hadoop.yarn.webapp.util.WebAppUtils;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
@ -100,7 +100,7 @@ public class TestRMAppAttemptTransitions {
|
||||
|
||||
private static final String EMPTY_DIAGNOSTICS = "";
|
||||
private static final String RM_WEBAPP_ADDR =
|
||||
YarnConfiguration.getRMWebAppHostAndPort(new Configuration());
|
||||
WebAppUtils.getResolvedRMWebAppURLWithoutScheme(new Configuration());
|
||||
|
||||
private boolean isSecurityEnabled;
|
||||
private RMContext rmContext;
|
||||
|
@ -28,6 +28,7 @@
|
||||
import org.apache.hadoop.conf.Configuration;
|
||||
import org.apache.hadoop.fs.FileContext;
|
||||
import org.apache.hadoop.fs.Path;
|
||||
import org.apache.hadoop.http.HttpConfig;
|
||||
import org.apache.hadoop.metrics2.lib.DefaultMetricsSystem;
|
||||
import org.apache.hadoop.service.AbstractService;
|
||||
import org.apache.hadoop.service.CompositeService;
|
||||
@ -39,7 +40,6 @@
|
||||
import org.apache.hadoop.yarn.exceptions.YarnRuntimeException;
|
||||
import org.apache.hadoop.yarn.factories.RecordFactory;
|
||||
import org.apache.hadoop.yarn.factory.providers.RecordFactoryProvider;
|
||||
import org.apache.hadoop.yarn.ipc.RPCUtil;
|
||||
import org.apache.hadoop.yarn.server.api.ResourceTracker;
|
||||
import org.apache.hadoop.yarn.server.api.protocolrecords.NodeHeartbeatRequest;
|
||||
import org.apache.hadoop.yarn.server.api.protocolrecords.NodeHeartbeatResponse;
|
||||
@ -52,6 +52,7 @@
|
||||
import org.apache.hadoop.yarn.server.nodemanager.NodeStatusUpdaterImpl;
|
||||
import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager;
|
||||
import org.apache.hadoop.yarn.server.resourcemanager.ResourceTrackerService;
|
||||
import org.apache.hadoop.yarn.webapp.util.WebAppUtils;
|
||||
|
||||
/**
|
||||
* Embedded Yarn minicluster for testcases that need to interact with a cluster.
|
||||
@ -204,8 +205,7 @@ public synchronized void serviceStart() throws Exception {
|
||||
hostname + ":0");
|
||||
getConfig().set(YarnConfiguration.RM_RESOURCE_TRACKER_ADDRESS,
|
||||
hostname + ":0");
|
||||
getConfig().set(YarnConfiguration.RM_WEBAPP_ADDRESS,
|
||||
hostname + ":0");
|
||||
WebAppUtils.setRMWebAppHostnameAndPort(getConfig(), hostname, 0);
|
||||
}
|
||||
resourceManager = new ResourceManager() {
|
||||
@Override
|
||||
@ -238,7 +238,7 @@ public void run() {
|
||||
LOG.info("MiniYARN ResourceManager address: " +
|
||||
getConfig().get(YarnConfiguration.RM_ADDRESS));
|
||||
LOG.info("MiniYARN ResourceManager web address: " +
|
||||
getConfig().get(YarnConfiguration.RM_WEBAPP_ADDRESS));
|
||||
WebAppUtils.getRMWebAppURLWithoutScheme(getConfig()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -317,8 +317,9 @@ public synchronized void serviceStart() throws Exception {
|
||||
MiniYARNCluster.getHostname() + ":0");
|
||||
getConfig().set(YarnConfiguration.NM_LOCALIZER_ADDRESS,
|
||||
MiniYARNCluster.getHostname() + ":0");
|
||||
getConfig().set(YarnConfiguration.NM_WEBAPP_ADDRESS,
|
||||
MiniYARNCluster.getHostname() + ":0");
|
||||
WebAppUtils
|
||||
.setNMWebAppHostNameAndPort(getConfig(),
|
||||
MiniYARNCluster.getHostname(), 0);
|
||||
|
||||
// Disable resource checks by default
|
||||
if (!getConfig().getBoolean(
|
||||
|
@ -29,6 +29,7 @@
|
||||
import org.apache.hadoop.util.StringUtils;
|
||||
import org.apache.hadoop.yarn.conf.YarnConfiguration;
|
||||
import org.apache.hadoop.yarn.exceptions.YarnRuntimeException;
|
||||
import org.apache.hadoop.yarn.webapp.util.WebAppUtils;
|
||||
|
||||
import org.apache.hadoop.fs.CommonConfigurationKeys;
|
||||
|
||||
@ -62,7 +63,7 @@ protected void serviceInit(Configuration conf) throws Exception {
|
||||
CommonConfigurationKeys.HADOOP_SECURITY_AUTHENTICATION +
|
||||
" of " + auth);
|
||||
}
|
||||
String proxy = YarnConfiguration.getProxyHostAndPort(conf);
|
||||
String proxy = WebAppUtils.getProxyHostAndPort(conf);
|
||||
String[] proxyParts = proxy.split(":");
|
||||
proxyHost = proxyParts[0];
|
||||
|
||||
|
@ -56,6 +56,7 @@
|
||||
import org.apache.hadoop.yarn.util.TrackingUriPlugin;
|
||||
import org.apache.hadoop.yarn.webapp.MimeType;
|
||||
import org.apache.hadoop.yarn.webapp.hamlet.Hamlet;
|
||||
import org.apache.hadoop.yarn.webapp.util.WebAppUtils;
|
||||
|
||||
public class WebAppProxyServlet extends HttpServlet {
|
||||
private static final long serialVersionUID = 1L;
|
||||
@ -94,7 +95,7 @@ public WebAppProxyServlet()
|
||||
conf.getInstances(YarnConfiguration.YARN_TRACKING_URL_GENERATOR,
|
||||
TrackingUriPlugin.class);
|
||||
this.rmAppPageUrlBase = StringHelper.pjoin(
|
||||
YarnConfiguration.getRMWebAppURL(conf), "cluster", "app");
|
||||
WebAppUtils.getResolvedRMWebAppURLWithScheme(conf), "cluster", "app");
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -26,7 +26,7 @@
|
||||
import org.apache.hadoop.http.FilterInitializer;
|
||||
import org.apache.hadoop.http.HttpConfig;
|
||||
import org.apache.hadoop.yarn.api.ApplicationConstants;
|
||||
import org.apache.hadoop.yarn.conf.YarnConfiguration;
|
||||
import org.apache.hadoop.yarn.webapp.util.WebAppUtils;
|
||||
|
||||
public class AmFilterInitializer extends FilterInitializer {
|
||||
private static final String FILTER_NAME = "AM_PROXY_FILTER";
|
||||
@ -35,7 +35,7 @@ public class AmFilterInitializer extends FilterInitializer {
|
||||
@Override
|
||||
public void initFilter(FilterContainer container, Configuration conf) {
|
||||
Map<String, String> params = new HashMap<String, String>();
|
||||
String proxy = YarnConfiguration.getProxyHostAndPort(conf);
|
||||
String proxy = WebAppUtils.getProxyHostAndPort(conf);
|
||||
String[] parts = proxy.split(":");
|
||||
params.put(AmIpFilter.PROXY_HOST, parts[0]);
|
||||
params.put(AmIpFilter.PROXY_URI_BASE,
|
||||
|
Loading…
Reference in New Issue
Block a user