You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ss...@apache.org on 2016/04/08 23:39:25 UTC
[1/3] hive git commit: HIVE-13398. LLAP: Simple /status and /peers
web services. (Gopal V, reviewed by Siddharth Seth, Sergey Shelukhin)
Repository: hive
Updated Branches:
refs/heads/master b543e1e88 -> 9a00b2f4c
HIVE-13398. LLAP: Simple /status and /peers web services. (Gopal V, reviewed by Siddharth Seth, Sergey Shelukhin)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/be20e602
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/be20e602
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/be20e602
Branch: refs/heads/master
Commit: be20e60262348155d7b81c4a0ec0a727136652a8
Parents: b543e1e
Author: Siddharth Seth <ss...@apache.org>
Authored: Fri Apr 8 14:33:34 2016 -0700
Committer: Siddharth Seth <ss...@apache.org>
Committed: Fri Apr 8 14:33:34 2016 -0700
----------------------------------------------------------------------
.../java/org/apache/hive/http/HttpServer.java | 4 +-
.../hive/llap/registry/ServiceRegistry.java | 4 +-
.../registry/impl/LlapFixedRegistryImpl.java | 5 +-
.../llap/registry/impl/LlapRegistryService.java | 17 +-
.../impl/LlapZookeeperRegistryImpl.java | 3 +-
.../hive/llap/daemon/impl/LlapDaemon.java | 7 +-
.../daemon/services/impl/LlapWebServices.java | 174 ++++++++++++++++++-
7 files changed, 203 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/be20e602/common/src/java/org/apache/hive/http/HttpServer.java
----------------------------------------------------------------------
diff --git a/common/src/java/org/apache/hive/http/HttpServer.java b/common/src/java/org/apache/hive/http/HttpServer.java
index b8836de..0aa9c89 100644
--- a/common/src/java/org/apache/hive/http/HttpServer.java
+++ b/common/src/java/org/apache/hive/http/HttpServer.java
@@ -39,6 +39,7 @@ import org.apache.hadoop.security.UserGroupInformation;
import org.apache.hadoop.security.authentication.server.AuthenticationFilter;
import org.apache.hadoop.security.authorize.AccessControlList;
import org.apache.hadoop.util.Shell;
+import org.apache.hadoop.hive.common.classification.InterfaceAudience;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.core.Appender;
import org.apache.logging.log4j.core.Logger;
@@ -210,7 +211,8 @@ public class HttpServer {
* @param response the servlet response.
* @return TRUE/FALSE based on the logic described above.
*/
- static boolean isInstrumentationAccessAllowed(
+ @InterfaceAudience.LimitedPrivate("hive")
+ public static boolean isInstrumentationAccessAllowed(
ServletContext servletContext, HttpServletRequest request,
HttpServletResponse response) throws IOException {
Configuration conf =
http://git-wip-us.apache.org/repos/asf/hive/blob/be20e602/llap-client/src/java/org/apache/hadoop/hive/llap/registry/ServiceRegistry.java
----------------------------------------------------------------------
diff --git a/llap-client/src/java/org/apache/hadoop/hive/llap/registry/ServiceRegistry.java b/llap-client/src/java/org/apache/hadoop/hive/llap/registry/ServiceRegistry.java
index f94a837..4938c07 100644
--- a/llap-client/src/java/org/apache/hadoop/hive/llap/registry/ServiceRegistry.java
+++ b/llap-client/src/java/org/apache/hadoop/hive/llap/registry/ServiceRegistry.java
@@ -37,9 +37,11 @@ public interface ServiceRegistry {
/**
* Register the current instance - the implementation takes care of the endpoints to register.
*
+ * @return self identifying name
+ *
* @throws IOException
*/
- public void register() throws IOException;
+ public String register() throws IOException;
/**
* Remove the current registration cleanly (implementation defined cleanup)
http://git-wip-us.apache.org/repos/asf/hive/blob/be20e602/llap-client/src/java/org/apache/hadoop/hive/llap/registry/impl/LlapFixedRegistryImpl.java
----------------------------------------------------------------------
diff --git a/llap-client/src/java/org/apache/hadoop/hive/llap/registry/impl/LlapFixedRegistryImpl.java b/llap-client/src/java/org/apache/hadoop/hive/llap/registry/impl/LlapFixedRegistryImpl.java
index 8cace8f..3f667d0 100644
--- a/llap-client/src/java/org/apache/hadoop/hive/llap/registry/impl/LlapFixedRegistryImpl.java
+++ b/llap-client/src/java/org/apache/hadoop/hive/llap/registry/impl/LlapFixedRegistryImpl.java
@@ -89,8 +89,9 @@ public class LlapFixedRegistryImpl implements ServiceRegistry {
}
@Override
- public void register() throws IOException {
- // nothing to register
+ public String register() throws IOException {
+ // nothing to register (return host-<hostname>)
+ return getWorkerIdentity(InetAddress.getLocalHost().getCanonicalHostName());
}
@Override
http://git-wip-us.apache.org/repos/asf/hive/blob/be20e602/llap-client/src/java/org/apache/hadoop/hive/llap/registry/impl/LlapRegistryService.java
----------------------------------------------------------------------
diff --git a/llap-client/src/java/org/apache/hadoop/hive/llap/registry/impl/LlapRegistryService.java b/llap-client/src/java/org/apache/hadoop/hive/llap/registry/impl/LlapRegistryService.java
index 5917156..2b4516b 100644
--- a/llap-client/src/java/org/apache/hadoop/hive/llap/registry/impl/LlapRegistryService.java
+++ b/llap-client/src/java/org/apache/hadoop/hive/llap/registry/impl/LlapRegistryService.java
@@ -18,6 +18,7 @@ import java.util.HashMap;
import java.util.Map;
import com.google.common.base.Preconditions;
+
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hive.conf.HiveConf;
import org.apache.hadoop.hive.conf.HiveConf.ConfVars;
@@ -34,6 +35,8 @@ public class LlapRegistryService extends AbstractService {
private ServiceRegistry registry = null;
private final boolean isDaemon;
+ private boolean isDynamic = false;
+ private String identity = "(pending)";
private static final Map<String, LlapRegistryService> yarnRegistries = new HashMap<>();
@@ -79,8 +82,10 @@ public class LlapRegistryService extends AbstractService {
String hosts = HiveConf.getTrimmedVar(conf, ConfVars.LLAP_DAEMON_SERVICE_HOSTS);
if (hosts.startsWith("@")) {
registry = new LlapZookeeperRegistryImpl(hosts.substring(1), conf);
+ this.isDynamic=true;
} else {
registry = new LlapFixedRegistryImpl(hosts, conf);
+ this.isDynamic=false;
}
LOG.info("Using LLAP registry type " + registry);
}
@@ -110,7 +115,7 @@ public class LlapRegistryService extends AbstractService {
private void registerWorker() throws IOException {
if (this.registry != null) {
- this.registry.register();
+ this.identity = this.registry.register();
}
}
@@ -128,4 +133,14 @@ public class LlapRegistryService extends AbstractService {
throws IOException {
this.registry.registerStateChangeListener(listener);
}
+
+ // is the registry dynamic (i.e refreshes?)
+ public boolean isDynamic() {
+ return isDynamic;
+ }
+
+ // this is only useful for the daemons to know themselves
+ public String getWorkerIdentity() {
+ return identity;
+ }
}
http://git-wip-us.apache.org/repos/asf/hive/blob/be20e602/llap-client/src/java/org/apache/hadoop/hive/llap/registry/impl/LlapZookeeperRegistryImpl.java
----------------------------------------------------------------------
diff --git a/llap-client/src/java/org/apache/hadoop/hive/llap/registry/impl/LlapZookeeperRegistryImpl.java b/llap-client/src/java/org/apache/hadoop/hive/llap/registry/impl/LlapZookeeperRegistryImpl.java
index ba38fb8..3538bb2 100644
--- a/llap-client/src/java/org/apache/hadoop/hive/llap/registry/impl/LlapZookeeperRegistryImpl.java
+++ b/llap-client/src/java/org/apache/hadoop/hive/llap/registry/impl/LlapZookeeperRegistryImpl.java
@@ -239,7 +239,7 @@ public class LlapZookeeperRegistryImpl implements ServiceRegistry {
}
@Override
- public void register() throws IOException {
+ public String register() throws IOException {
ServiceRecord srv = new ServiceRecord();
Endpoint rpcEndpoint = getRpcEndpoint();
srv.addInternalEndpoint(rpcEndpoint);
@@ -294,6 +294,7 @@ public class LlapZookeeperRegistryImpl implements ServiceRegistry {
if (LOG.isDebugEnabled()) {
LOG.debug("Created zknode with path: {} service record: {}", znodePath, srv);
}
+ return uniq.toString();
}
@Override
http://git-wip-us.apache.org/repos/asf/hive/blob/be20e602/llap-server/src/java/org/apache/hadoop/hive/llap/daemon/impl/LlapDaemon.java
----------------------------------------------------------------------
diff --git a/llap-server/src/java/org/apache/hadoop/hive/llap/daemon/impl/LlapDaemon.java b/llap-server/src/java/org/apache/hadoop/hive/llap/daemon/impl/LlapDaemon.java
index 8600832..768aa8a 100644
--- a/llap-server/src/java/org/apache/hadoop/hive/llap/daemon/impl/LlapDaemon.java
+++ b/llap-server/src/java/org/apache/hadoop/hive/llap/daemon/impl/LlapDaemon.java
@@ -208,11 +208,13 @@ public class LlapDaemon extends CompositeService implements ContainerRunner, Lla
amReporter, executorClassLoader);
addIfService(containerRunner);
+ // Not adding the registry as a service, since we need to control when it is initialized - conf used to pickup properties.
+ this.registry = new LlapRegistryService(true);
if (HiveConf.getBoolVar(daemonConf, HiveConf.ConfVars.HIVE_IN_TEST)) {
this.webServices = null;
} else {
- this.webServices = new LlapWebServices(webPort);
+ this.webServices = new LlapWebServices(webPort, this, registry);
addIfService(webServices);
}
// Bring up the server only after all other components have started.
@@ -220,9 +222,6 @@ public class LlapDaemon extends CompositeService implements ContainerRunner, Lla
// AMReporter after the server so that it gets the correct address. It knows how to deal with
// requests before it is started.
addIfService(amReporter);
-
- // Not adding the registry as a service, since we need to control when it is initialized - conf used to pickup properties.
- this.registry = new LlapRegistryService(true);
}
private void initializeLogging() {
http://git-wip-us.apache.org/repos/asf/hive/blob/be20e602/llap-server/src/java/org/apache/hadoop/hive/llap/daemon/services/impl/LlapWebServices.java
----------------------------------------------------------------------
diff --git a/llap-server/src/java/org/apache/hadoop/hive/llap/daemon/services/impl/LlapWebServices.java b/llap-server/src/java/org/apache/hadoop/hive/llap/daemon/services/impl/LlapWebServices.java
index e4c622e..d0be9a7 100644
--- a/llap-server/src/java/org/apache/hadoop/hive/llap/daemon/services/impl/LlapWebServices.java
+++ b/llap-server/src/java/org/apache/hadoop/hive/llap/daemon/services/impl/LlapWebServices.java
@@ -18,14 +18,32 @@
package org.apache.hadoop.hive.llap.daemon.services.impl;
import java.io.IOException;
+import java.io.PrintWriter;
+import java.lang.management.ManagementFactory;
+import java.lang.management.RuntimeMXBean;
+
+import javax.management.MalformedObjectNameException;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hive.common.classification.InterfaceAudience;
import org.apache.hadoop.hive.conf.HiveConf;
import org.apache.hadoop.hive.conf.HiveConf.ConfVars;
+import org.apache.hadoop.hive.llap.registry.ServiceInstance;
+import org.apache.hadoop.hive.llap.registry.impl.LlapRegistryService;
+import org.apache.hadoop.hive.llap.registry.impl.LlapZookeeperRegistryImpl;
import org.apache.hadoop.security.UserGroupInformation;
import org.apache.hadoop.service.AbstractService;
+import org.apache.hadoop.service.CompositeService;
+import org.apache.hadoop.yarn.api.records.Resource;
+import org.apache.hive.common.util.HiveVersionInfo;
import org.apache.hive.http.HttpServer;
+import org.codehaus.jackson.JsonFactory;
+import org.codehaus.jackson.JsonGenerator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -33,14 +51,26 @@ public class LlapWebServices extends AbstractService {
private static final Logger LOG = LoggerFactory.getLogger(LlapWebServices.class);
+ // this is what allows the UI to do cross-domain reads of the contents
+ // only apply to idempotent GET ops (all others need crumbs)
+ static final String ACCESS_CONTROL_ALLOW_METHODS = "Access-Control-Allow-Methods";
+ static final String ACCESS_CONTROL_ALLOW_ORIGIN = "Access-Control-Allow-Origin";
+
+ static final String REGISTRY_ATTRIBUTE="llap.registry";
+ static final String PARENT_ATTRIBUTE="llap.parent";
+
private int port;
private HttpServer http;
private boolean useSSL = false;
private boolean useSPNEGO = false;
+ private final CompositeService parent;
+ private final LlapRegistryService registry;
- public LlapWebServices(int port) {
+ public LlapWebServices(int port, CompositeService parent, LlapRegistryService registry) {
super("LlapWebServices");
this.port = port;
+ this.registry = registry;
+ this.parent = parent;
}
@Override
@@ -63,8 +93,13 @@ public class LlapWebServices extends AbstractService {
}
}
+ builder.setContextAttribute(REGISTRY_ATTRIBUTE, registry);
+ builder.setContextAttribute(PARENT_ATTRIBUTE, parent);
+
try {
this.http = builder.build();
+ this.http.addServlet("status", "/status", LlapStatusServlet.class);
+ this.http.addServlet("peers", "/peers", LlapPeerRegistryServlet.class);
} catch (IOException e) {
LOG.warn("LLAP web service failed to come up", e);
}
@@ -88,4 +123,141 @@ public class LlapWebServices extends AbstractService {
this.http.stop();
}
}
+
+ public static class LlapStatusServlet extends HttpServlet {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * Possible values: UNKNOWN, NOTINITED, INITED, STARTED, STOPPED
+ */
+ private static final String STATUS_ATTRIBUTE = "status";
+ private static final String UPTIME_ATTRIBUTE = "uptime";
+ private static final String BUILD_ATTRIBUTE = "build";
+
+ private static final String UNKNOWN_STATE = "UNKNOWN";
+
+ protected transient JsonFactory jsonFactory;
+
+ protected RuntimeMXBean runtimeBean;
+
+ @Override
+ public void init() throws ServletException {
+ jsonFactory = new JsonFactory();
+ runtimeBean = ManagementFactory.getRuntimeMXBean();
+ }
+
+ @Override
+ public void doGet(HttpServletRequest request, HttpServletResponse response) {
+ JsonGenerator jg = null;
+ PrintWriter writer = null;
+ final ServletContext context = getServletContext();
+ final Object parent = context.getAttribute(PARENT_ATTRIBUTE);
+
+ final long uptime = runtimeBean.getUptime();
+
+ try {
+ try {
+ writer = response.getWriter();
+
+ response.setContentType("application/json; charset=utf8");
+ response.setHeader(ACCESS_CONTROL_ALLOW_METHODS, "GET");
+ response.setHeader(ACCESS_CONTROL_ALLOW_ORIGIN, "*");
+ jg = jsonFactory.createJsonGenerator(writer);
+ jg.disable(JsonGenerator.Feature.AUTO_CLOSE_TARGET);
+ jg.useDefaultPrettyPrinter();
+ jg.writeStartObject();
+ if (parent != null && parent instanceof CompositeService) {
+ jg.writeStringField(STATUS_ATTRIBUTE, ((CompositeService) parent).getServiceState()
+ .toString());
+ } else {
+ jg.writeStringField(STATUS_ATTRIBUTE, UNKNOWN_STATE);
+ }
+ jg.writeNumberField(UPTIME_ATTRIBUTE, uptime);
+ jg.writeStringField(BUILD_ATTRIBUTE, HiveVersionInfo.getBuildVersion());
+ jg.writeEndObject();
+ } finally {
+ if (jg != null) {
+ jg.close();
+ }
+ if (writer != null) {
+ writer.close();
+ }
+ }
+ } catch (IOException e) {
+ LOG.error("Caught an exception while processing /status request", e);
+ response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ }
+ }
+ }
+
+ public static class LlapPeerRegistryServlet extends HttpServlet {
+ private static final long serialVersionUID = 1L;
+ protected transient JsonFactory jsonFactory;
+
+ @Override
+ public void init() throws ServletException {
+ jsonFactory = new JsonFactory();
+ }
+
+ @Override
+ public void doGet(HttpServletRequest request, HttpServletResponse response) {
+ JsonGenerator jg = null;
+ PrintWriter writer = null;
+ final ServletContext context = getServletContext();
+ final LlapRegistryService registry = (LlapRegistryService)context.getAttribute(REGISTRY_ATTRIBUTE);
+
+ try {
+ // admin check
+ if (!HttpServer.isInstrumentationAccessAllowed(context, request, response)) {
+ return;
+ }
+ try {
+ writer = response.getWriter();
+
+ response.setContentType("application/json; charset=utf8");
+ response.setHeader(ACCESS_CONTROL_ALLOW_METHODS, "GET");
+ response.setHeader(ACCESS_CONTROL_ALLOW_ORIGIN, "*");
+ jg = jsonFactory.createJsonGenerator(writer);
+ jg.disable(JsonGenerator.Feature.AUTO_CLOSE_TARGET);
+ jg.useDefaultPrettyPrinter();
+ jg.writeStartObject();
+ if (registry.isDynamic()) {
+ jg.writeBooleanField("dynamic", true);
+ }
+ jg.writeStringField("identity", registry.getWorkerIdentity());
+ jg.writeArrayFieldStart("peers");
+ for (ServiceInstance s : registry.getInstances().getAllInstancesOrdered()) {
+ jg.writeStartObject();
+ jg.writeStringField("identity", s.getWorkerIdentity());
+ jg.writeStringField("host", s.getHost());
+ jg.writeNumberField("management-port", s.getManagementPort());
+ jg.writeNumberField("rpc-port", s.getRpcPort());
+ jg.writeNumberField("shuffle-port", s.getShufflePort());
+ Resource r = s.getResource();
+ if (r != null) {
+ jg.writeObjectFieldStart("resource");
+ jg.writeNumberField("vcores", r.getVirtualCores());
+ jg.writeNumberField("memory", r.getMemory());
+ jg.writeEndObject();
+ }
+ jg.writeStringField("host", s.getHost());
+ jg.writeEndObject();
+ }
+ jg.writeEndArray();
+ jg.writeEndObject();
+ } finally {
+ if (jg != null) {
+ jg.close();
+ }
+ if (writer != null) {
+ writer.close();
+ }
+ }
+ } catch (IOException e) {
+ LOG.error("Caught an exception while processing /status request", e);
+ response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ }
+ }
+ }
+
}
[2/3] hive git commit: HIVE-13436. Allow the package directory to be
specified for the llap setup script. (Siddharth Seth,
reviewed by Sergey Shelukhin)
Posted by ss...@apache.org.
HIVE-13436. Allow the package directory to be specified for the llap setup script. (Siddharth Seth, reviewed by Sergey Shelukhin)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/23908230
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/23908230
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/23908230
Branch: refs/heads/master
Commit: 23908230bcd5a444f1a9e0702daec083f2f48f57
Parents: be20e60
Author: Siddharth Seth <ss...@apache.org>
Authored: Fri Apr 8 14:36:19 2016 -0700
Committer: Siddharth Seth <ss...@apache.org>
Committed: Fri Apr 8 14:36:19 2016 -0700
----------------------------------------------------------------------
.../org/apache/hadoop/hive/llap/cli/LlapOptionsProcessor.java | 5 +++++
1 file changed, 5 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/23908230/llap-server/src/java/org/apache/hadoop/hive/llap/cli/LlapOptionsProcessor.java
----------------------------------------------------------------------
diff --git a/llap-server/src/java/org/apache/hadoop/hive/llap/cli/LlapOptionsProcessor.java b/llap-server/src/java/org/apache/hadoop/hive/llap/cli/LlapOptionsProcessor.java
index 418f77f..dd908fc 100644
--- a/llap-server/src/java/org/apache/hadoop/hive/llap/cli/LlapOptionsProcessor.java
+++ b/llap-server/src/java/org/apache/hadoop/hive/llap/cli/LlapOptionsProcessor.java
@@ -61,6 +61,7 @@ public class LlapOptionsProcessor {
public static final String OPTION_SLIDER_KEYTAB = "slider-keytab";
public static final String OPTION_SLIDER_PRINCIPAL = "slider-principal";
public static final String OPTION_SLIDER_DEFAULT_KEYTAB = "slider-default-keytab";
+ public static final String OPTION_OUTPUT_DIR = "output";
public class LlapOptions {
@@ -208,6 +209,10 @@ public class LlapOptionsProcessor {
.withLongOpt(OPTION_LLAP_QUEUE)
.withDescription("The queue within which LLAP will be started").create('q'));
+ options.addOption(OptionBuilder.hasArg().withArgName(OPTION_OUTPUT_DIR)
+ .withLongOpt(OPTION_OUTPUT_DIR)
+ .withDescription("Output directory for the generated scripts").create());
+
options.addOption(OptionBuilder.hasArg().withArgName(OPTION_AUXJARS).withLongOpt(OPTION_AUXJARS)
.withDescription("additional jars to package (by default, JSON SerDe jar is packaged"
+ " if available)").create('j'));
[3/3] hive git commit: HIVE-13437. httpserver getPort does not return
the actual port when attempting to use a dynamic port. (Siddharth Seth,
reviewed by Prasanth Jayachandran and Sergey Shelukhin)
Posted by ss...@apache.org.
HIVE-13437. httpserver getPort does not return the actual port when attempting to use a dynamic port. (Siddharth Seth, reviewed by Prasanth Jayachandran and Sergey Shelukhin)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/9a00b2f4
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/9a00b2f4
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/9a00b2f4
Branch: refs/heads/master
Commit: 9a00b2f4c430e6c85c824ac8f4e7a128c551df1a
Parents: 2390823
Author: Siddharth Seth <ss...@apache.org>
Authored: Fri Apr 8 14:38:34 2016 -0700
Committer: Siddharth Seth <ss...@apache.org>
Committed: Fri Apr 8 14:38:34 2016 -0700
----------------------------------------------------------------------
.../java/org/apache/hive/http/HttpServer.java | 25 +++++++++++++-------
.../daemon/services/impl/LlapWebServices.java | 2 +-
.../apache/hive/service/server/HiveServer2.java | 4 ++--
3 files changed, 19 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/9a00b2f4/common/src/java/org/apache/hive/http/HttpServer.java
----------------------------------------------------------------------
diff --git a/common/src/java/org/apache/hive/http/HttpServer.java b/common/src/java/org/apache/hive/http/HttpServer.java
index 0aa9c89..32956b1 100644
--- a/common/src/java/org/apache/hive/http/HttpServer.java
+++ b/common/src/java/org/apache/hive/http/HttpServer.java
@@ -30,6 +30,7 @@ import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import com.google.common.base.Preconditions;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.CommonConfigurationKeys;
import org.apache.hadoop.hive.conf.HiveConf;
@@ -66,16 +67,20 @@ import org.eclipse.jetty.webapp.WebAppContext;
import com.google.common.base.Splitter;
import com.google.common.base.Strings;
import com.google.common.collect.Sets;
+import org.slf4j.LoggerFactory;
/**
* A simple embedded Jetty server to serve as HS2/HMS web UI.
*/
public class HttpServer {
+
+ private static final org.slf4j.Logger LOG = LoggerFactory.getLogger(HttpServer.class);
+
public static final String CONF_CONTEXT_ATTRIBUTE = "hive.conf";
public static final String ADMINS_ACL = "admins.acl";
+ private final String name;
private final String appDir;
- private final int port;
private final WebAppContext webAppContext;
private final Server webServer;
@@ -83,7 +88,7 @@ public class HttpServer {
* Create a status server on the given port.
*/
private HttpServer(final Builder b) throws IOException {
- this.port = b.port;
+ this.name = b.name;
webServer = new Server();
appDir = getWebAppsPath(b.name);
@@ -98,7 +103,7 @@ public class HttpServer {
}
public static class Builder {
- private String name;
+ private final String name;
private String host;
private int port;
private int maxThreads;
@@ -111,6 +116,11 @@ public class HttpServer {
private boolean useSPNEGO;
private boolean useSSL;
+ public Builder(String name) {
+ Preconditions.checkArgument(name != null && !name.isEmpty(), "Name must be specified");
+ this.name = name;
+ }
+
public HttpServer build() throws IOException {
return new HttpServer(this);
}
@@ -121,10 +131,6 @@ public class HttpServer {
return this;
}
- public Builder setName(String name) {
- this.name = name;
- return this;
- }
public Builder setHost(String host) {
this.host = host;
@@ -186,6 +192,7 @@ public class HttpServer {
public void start() throws Exception {
webServer.start();
+ LOG.info("Started HttpServer[{}] on port {}", name, getPort());
}
public void stop() throws Exception {
@@ -193,7 +200,7 @@ public class HttpServer {
}
public int getPort() {
- return port;
+ return webServer.getConnectors()[0].getLocalPort();
}
/**
@@ -364,7 +371,7 @@ public class HttpServer {
// Create the channel connector for the web server
Connector connector = createChannelConnector(threadPool.getMaxThreads(), b);
connector.setHost(b.host);
- connector.setPort(port);
+ connector.setPort(b.port);
webServer.addConnector(connector);
// Configure web application contexts for the web server
http://git-wip-us.apache.org/repos/asf/hive/blob/9a00b2f4/llap-server/src/java/org/apache/hadoop/hive/llap/daemon/services/impl/LlapWebServices.java
----------------------------------------------------------------------
diff --git a/llap-server/src/java/org/apache/hadoop/hive/llap/daemon/services/impl/LlapWebServices.java b/llap-server/src/java/org/apache/hadoop/hive/llap/daemon/services/impl/LlapWebServices.java
index d0be9a7..f85bbf2 100644
--- a/llap-server/src/java/org/apache/hadoop/hive/llap/daemon/services/impl/LlapWebServices.java
+++ b/llap-server/src/java/org/apache/hadoop/hive/llap/daemon/services/impl/LlapWebServices.java
@@ -80,7 +80,7 @@ public class LlapWebServices extends AbstractService {
this.useSPNEGO = HiveConf.getBoolVar(conf, ConfVars.LLAP_WEB_AUTO_AUTH);
String bindAddress = "0.0.0.0";
HttpServer.Builder builder =
- new HttpServer.Builder().setName("llap").setPort(this.port).setHost(bindAddress);
+ new HttpServer.Builder("llap").setPort(this.port).setHost(bindAddress);
builder.setConf(new HiveConf(conf, HiveConf.class));
if (UserGroupInformation.isSecurityEnabled()) {
LOG.info("LLAP UI useSSL=" + this.useSSL + ", auto-auth/SPNEGO="
http://git-wip-us.apache.org/repos/asf/hive/blob/9a00b2f4/service/src/java/org/apache/hive/service/server/HiveServer2.java
----------------------------------------------------------------------
diff --git a/service/src/java/org/apache/hive/service/server/HiveServer2.java b/service/src/java/org/apache/hive/service/server/HiveServer2.java
index d95f78f..882f4ae 100644
--- a/service/src/java/org/apache/hive/service/server/HiveServer2.java
+++ b/service/src/java/org/apache/hive/service/server/HiveServer2.java
@@ -142,8 +142,8 @@ public class HiveServer2 extends CompositeService {
if (webUIPort <= 0) {
LOG.info("Web UI is disabled since port is set to " + webUIPort);
} else {
- HttpServer.Builder builder = new HttpServer.Builder();
- builder.setName("hiveserver2").setPort(webUIPort).setConf(hiveConf);
+ HttpServer.Builder builder = new HttpServer.Builder("hiveserver2");
+ builder.setPort(webUIPort).setConf(hiveConf);
builder.setHost(hiveConf.getVar(ConfVars.HIVE_SERVER2_WEBUI_BIND_HOST));
builder.setMaxThreads(
hiveConf.getIntVar(ConfVars.HIVE_SERVER2_WEBUI_MAX_THREADS));