You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ng...@apache.org on 2022/07/13 17:05:50 UTC
[hive] branch master updated: [WIP] HIVE-21456: addendum: Improvements in Thrift over HTTP for Hive MetaStore (#3381)
This is an automated email from the ASF dual-hosted git repository.
ngangam pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git
The following commit(s) were added to refs/heads/master by this push:
new 472bd526796 [WIP] HIVE-21456: addendum: Improvements in Thrift over HTTP for Hive MetaStore (#3381)
472bd526796 is described below
commit 472bd526796691e046ed5201276e60330a5ffe1a
Author: Sourabh Goyal <so...@cloudera.com>
AuthorDate: Wed Jul 13 10:05:37 2022 -0700
[WIP] HIVE-21456: addendum: Improvements in Thrift over HTTP for Hive MetaStore (#3381)
* [WIP]HIVE-21456: addendum: Improvements in Thrift over HTTP for Hive MetaStore
Change-Id: Ide139bff133667eae9ac5cbf5699e20f0ab059df
* Switches back to using jetty version 9.3.27.v20190418 in HiveMetaStore. Added a request listener in ServletContext
Change-Id: Ic2380b6586ea1f56662f7599242cb0d77a2a3760
* Removed unnecessary jetty dependencies
Change-Id: I5ec5ce2434b58f3f48578e014225e0e114d00cb6
* Addded comments and removed unnecessary code
Change-Id: I0ce76b1c59a0e7262c64a74fdea85674475426ed
* Removes unnecessary code
Change-Id: I64b5f01926e2eb65cbb4c4069d2c6db17849b2e5
---
standalone-metastore/metastore-server/pom.xml | 15 +++++++
.../hadoop/hive/metastore/HiveMetaStore.java | 50 +++++++++++++++-------
.../hadoop/hive/metastore/TestHiveMetaStore.java | 2 +-
standalone-metastore/pom.xml | 26 +++++++++++
4 files changed, 76 insertions(+), 17 deletions(-)
diff --git a/standalone-metastore/metastore-server/pom.xml b/standalone-metastore/metastore-server/pom.xml
index d8a454e9545..8bafeb132ee 100644
--- a/standalone-metastore/metastore-server/pom.xml
+++ b/standalone-metastore/metastore-server/pom.xml
@@ -277,6 +277,21 @@
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-util</artifactId>
+ <version>${jetty.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-server</artifactId>
+ <version>${jetty.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-servlet</artifactId>
+ <version>${jetty.version}</version>
+ </dependency>
<!-- test scope dependencies -->
<dependency>
<groupId>junit</groupId>
diff --git a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
index 445ea044401..083d1e39c4d 100644
--- a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
+++ b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
@@ -20,7 +20,6 @@ package org.apache.hadoop.hive.metastore;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.SynchronousQueue;
-import java.util.concurrent.ThreadFactory;
import org.apache.commons.cli.OptionBuilder;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hive.common.ZKDeRegisterWatcher;
@@ -63,8 +62,10 @@ import org.apache.thrift.transport.TTransportFactory;
import org.eclipse.jetty.security.ConstraintMapping;
import org.eclipse.jetty.security.ConstraintSecurityHandler;
+import org.eclipse.jetty.server.HttpChannel;
import org.eclipse.jetty.server.HttpConfiguration;
import org.eclipse.jetty.server.HttpConnectionFactory;
+import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.servlet.ServletContextHandler;
@@ -91,7 +92,8 @@ import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
-
+import javax.servlet.ServletRequestEvent;
+import javax.servlet.ServletRequestListener;
/**
* TODO:pc remove application logic to a separate interface.
*/
@@ -398,18 +400,15 @@ public class HiveMetaStore extends ThriftHiveMetastore {
// Server thread pool
// Start with minWorkerThreads, expand till maxWorkerThreads and reject
// subsequent requests
- final String threadPoolNamePrefix = "HiveMetastore-HttpHandler-Pool";
- ExecutorService executorService = new ThreadPoolExecutor(
- minWorkerThreads, maxWorkerThreads, 60, TimeUnit.SECONDS,
- new SynchronousQueue<>(), new ThreadFactory() {
- @Override
- public Thread newThread(@NotNull Runnable r) {
- Thread newThread = new Thread(r);
- newThread.setName(threadPoolNamePrefix + ": Thread-" + newThread.getId());
- return newThread;
- }
+ // TODO: Add a config for keepAlive time of threads ?
+ ExecutorService executorService = new ThreadPoolExecutor(minWorkerThreads, maxWorkerThreads, 60L,
+ TimeUnit.SECONDS, new SynchronousQueue<>(), r -> {
+ Thread thread = new Thread(r);
+ thread.setDaemon(true);
+ thread.setName("Metastore-HttpHandler-Pool: Thread-" + thread.getId());
+ return thread;
});
- ExecutorThreadPool threadPool = new ExecutorThreadPool((ThreadPoolExecutor) executorService);
+ ExecutorThreadPool threadPool = new ExecutorThreadPool(executorService);
// HTTP Server
org.eclipse.jetty.server.Server server = new Server(threadPool);
server.setStopAtShutdown(true);
@@ -492,11 +491,30 @@ public class HiveMetaStore extends ThriftHiveMetastore {
// Tons of stuff skipped as compared the HS2.
// Sesions, XSRF, Compression, path configuration, etc.
constraintHttpMethods(context, false);
- server.setHandler(context);
context.addServlet(new ServletHolder(thriftHttpServlet), httpPath);
-
-
+ // adding a listener on servlet request so as to clean up
+ // rawStore when http request is completed
+ context.addEventListener(new ServletRequestListener() {
+ @Override
+ public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
+ Request baseRequest = Request.getBaseRequest(servletRequestEvent.getServletRequest());
+ HttpChannel channel = baseRequest.getHttpChannel();
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("request: " + baseRequest + " destroyed " + ", http channel: " + channel);
+ }
+ HMSHandler.cleanupHandlerContext();
+ }
+ @Override
+ public void requestInitialized(ServletRequestEvent servletRequestEvent) {
+ Request baseRequest = Request.getBaseRequest(servletRequestEvent.getServletRequest());
+ HttpChannel channel = baseRequest.getHttpChannel();
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("request: " + baseRequest + " initialized " + ", http channel: " + channel);
+ }
+ }
+ });
+ server.setHandler(context);
return new ThriftServer() {
@Override
public void start() throws Throwable {
diff --git a/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/TestHiveMetaStore.java b/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/TestHiveMetaStore.java
index 786f963224e..fd54c8b06e2 100644
--- a/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/TestHiveMetaStore.java
+++ b/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/TestHiveMetaStore.java
@@ -3330,7 +3330,7 @@ public abstract class TestHiveMetaStore {
Field pmCache;
Field pmf;
try {
- pmf = ObjectStore.class.getDeclaredField("pmf");
+ pmf = PersistenceManagerProvider.class.getDeclaredField("pmf");
if (pmf != null) {
pmf.setAccessible(true);
jdoPmf = (JDOPersistenceManagerFactory) pmf.get(null);
diff --git a/standalone-metastore/pom.xml b/standalone-metastore/pom.xml
index b00282a0a94..42f5e963190 100644
--- a/standalone-metastore/pom.xml
+++ b/standalone-metastore/pom.xml
@@ -106,6 +106,7 @@
<httpcomponents.core.version>4.4.13</httpcomponents.core.version>
<pac4j-core.version>4.5.5</pac4j-core.version>
<nimbus-jose-jwt.version>9.20</nimbus-jose-jwt.version>
+ <jetty.version>9.3.27.v20190418</jetty.version>
<!-- Thrift properties -->
<thrift.home>you-must-set-this-to-run-thrift</thrift.home>
<thrift.gen.dir>${basedir}/src/gen/thrift</thrift.gen.dir>
@@ -206,6 +207,10 @@
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
</exclusion>
+ <exclusion>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
</exclusions>
</dependency>
<dependency>
@@ -218,6 +223,12 @@
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>${hadoop.version}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
@@ -369,6 +380,21 @@
<artifactId>httpcore</artifactId>
<version>${httpcomponents.core.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-util</artifactId>
+ <version>${jetty.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-server</artifactId>
+ <version>${jetty.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-servlet</artifactId>
+ <version>${jetty.version}</version>
+ </dependency>
<!-- test scope dependencies -->
<dependency>
<groupId>junit</groupId>