From 7ab048c2d8eda577ecf01c0abfe19874b8c82085 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Thi=C3=A9baud?= Date: Fri, 9 May 2014 10:11:22 -0700 Subject: [PATCH] HIVE-7040 TCP KeepAlive for HiveServer2 (partial) --- common/src/java/org/apache/hadoop/hive/conf/HiveConf.java | 1 + conf/hive-default.xml.template | 9 ++++++++- .../org/apache/hadoop/hive/metastore/TServerSocketKeepAlive.java | 6 ++++++ .../src/java/org/apache/hive/service/auth/HiveAuthFactory.java | 5 +++-- .../apache/hive/service/cli/thrift/ThriftBinaryCLIService.java | 3 ++- 5 files changed, 20 insertions(+), 4 deletions(-) diff --git a/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java b/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java index 604bea7..1bead01 100644 --- a/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java +++ b/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java @@ -891,6 +891,7 @@ new StringsValidator("auth", "auth-int", "auth-conf")), HIVE_SERVER2_THRIFT_MIN_WORKER_THREADS("hive.server2.thrift.min.worker.threads", 5), HIVE_SERVER2_THRIFT_MAX_WORKER_THREADS("hive.server2.thrift.max.worker.threads", 500), + HIVE_SERVER2_TCP_KEEP_ALIVE("hive.server2.tcp.keepalive", true), // Configuration for async thread pool in SessionManager // Number of async threads diff --git a/conf/hive-default.xml.template b/conf/hive-default.xml.template index 2552560..1969a10 100644 --- a/conf/hive-default.xml.template +++ b/conf/hive-default.xml.template @@ -941,7 +941,14 @@ hive.server2.thrift.http.max.worker.threads 500 Maximum number of worker threads when in HTTP mode. - + + + + hive.server2.tcp.keepalive + true + Whether to enable TCP keepalive for Hive Server 2. This feature + is limited to binary transport mode without SSL + hive.script.recordreader diff --git a/metastore/src/java/org/apache/hadoop/hive/metastore/TServerSocketKeepAlive.java b/metastore/src/java/org/apache/hadoop/hive/metastore/TServerSocketKeepAlive.java index 9ac18dc..1c16bf4 100644 --- a/metastore/src/java/org/apache/hadoop/hive/metastore/TServerSocketKeepAlive.java +++ b/metastore/src/java/org/apache/hadoop/hive/metastore/TServerSocketKeepAlive.java @@ -18,6 +18,7 @@ package org.apache.hadoop.hive.metastore; +import java.net.InetSocketAddress; import java.net.SocketException; import org.apache.thrift.transport.TServerSocket; @@ -30,6 +31,11 @@ * */ public class TServerSocketKeepAlive extends TServerSocket { + + public TServerSocketKeepAlive(InetSocketAddress address) throws TTransportException { + super(address); + } + public TServerSocketKeepAlive(int port) throws TTransportException { super(port, 0); } diff --git a/service/src/java/org/apache/hive/service/auth/HiveAuthFactory.java b/service/src/java/org/apache/hive/service/auth/HiveAuthFactory.java index 72b3e7e..8918bc9 100644 --- a/service/src/java/org/apache/hive/service/auth/HiveAuthFactory.java +++ b/service/src/java/org/apache/hive/service/auth/HiveAuthFactory.java @@ -29,6 +29,7 @@ import org.apache.hadoop.hive.conf.HiveConf; import org.apache.hadoop.hive.conf.HiveConf.ConfVars; +import org.apache.hadoop.hive.metastore.TServerSocketKeepAlive; import org.apache.hadoop.hive.shims.ShimLoader; import org.apache.hadoop.hive.thrift.HadoopThriftAuthBridge; import org.apache.hadoop.security.UserGroupInformation; @@ -214,7 +215,7 @@ public static TTransport getSSLSocket(String host, int port, int loginTimeout, return TSSLTransportFactory.getClientSocket(host, port, loginTimeout, params); } - public static TServerSocket getServerSocket(String hiveHost, int portNum) + public static TServerSocket getServerSocket(String hiveHost, int portNum, boolean tcpKeepalive) throws TTransportException { InetSocketAddress serverAddress = null; if (hiveHost != null && !hiveHost.isEmpty()) { @@ -222,7 +223,7 @@ public static TServerSocket getServerSocket(String hiveHost, int portNum) } else { serverAddress = new InetSocketAddress(portNum); } - return new TServerSocket(serverAddress ); + return tcpKeepalive ? new TServerSocketKeepAlive(serverAddress) : new TServerSocket(serverAddress); } public static TServerSocket getServerSSLSocket(String hiveHost, int portNum, diff --git a/service/src/java/org/apache/hive/service/cli/thrift/ThriftBinaryCLIService.java b/service/src/java/org/apache/hive/service/cli/thrift/ThriftBinaryCLIService.java index b009a88..371b113 100644 --- a/service/src/java/org/apache/hive/service/cli/thrift/ThriftBinaryCLIService.java +++ b/service/src/java/org/apache/hive/service/cli/thrift/ThriftBinaryCLIService.java @@ -66,7 +66,8 @@ public void run() { TServerSocket serverSocket = null; if (!hiveConf.getBoolVar(ConfVars.HIVE_SERVER2_USE_SSL)) { - serverSocket = HiveAuthFactory.getServerSocket(hiveHost, portNum); + serverSocket = HiveAuthFactory.getServerSocket(hiveHost, portNum, + hiveConf.getBoolVar(ConfVars.HIVE_SERVER2_TCP_KEEP_ALIVE)); } else { String keyStorePath = hiveConf.getVar(ConfVars.HIVE_SERVER2_SSL_KEYSTORE_PATH).trim(); if (keyStorePath.isEmpty()) { -- 1.8.4