diff --git common/src/java/org/apache/hadoop/hive/conf/HiveConf.java common/src/java/org/apache/hadoop/hive/conf/HiveConf.java
index 44d9a57..7b75a70 100644
--- common/src/java/org/apache/hadoop/hive/conf/HiveConf.java
+++ common/src/java/org/apache/hadoop/hive/conf/HiveConf.java
@@ -907,6 +907,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 conf/hive-default.xml.template conf/hive-default.xml.template
index e53df4f..a8e9569 100644
--- conf/hive-default.xml.template
+++ conf/hive-default.xml.template
@@ -945,7 +945,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 HiveServer2. This feature
+ is limited to binary transport mode.
+
hive.script.recordreader
diff --git metastore/src/java/org/apache/hadoop/hive/metastore/TServerSocketKeepAlive.java metastore/src/java/org/apache/hadoop/hive/metastore/TServerSocketKeepAlive.java
index 9ac18dc..f8777bd 100644
--- metastore/src/java/org/apache/hadoop/hive/metastore/TServerSocketKeepAlive.java
+++ metastore/src/java/org/apache/hadoop/hive/metastore/TServerSocketKeepAlive.java
@@ -18,8 +18,8 @@
package org.apache.hadoop.hive.metastore;
+import java.net.ServerSocket;
import java.net.SocketException;
-
import org.apache.thrift.transport.TServerSocket;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransportException;
@@ -30,6 +30,11 @@
*
*/
public class TServerSocketKeepAlive extends TServerSocket {
+
+ public TServerSocketKeepAlive(ServerSocket serverSocket) {
+ super(serverSocket);
+ }
+
public TServerSocketKeepAlive(int port) throws TTransportException {
super(port, 0);
}
diff --git service/src/java/org/apache/hive/service/cli/thrift/ThriftBinaryCLIService.java service/src/java/org/apache/hive/service/cli/thrift/ThriftBinaryCLIService.java
index b009a88..2ba811c 100644
--- service/src/java/org/apache/hive/service/cli/thrift/ThriftBinaryCLIService.java
+++ service/src/java/org/apache/hive/service/cli/thrift/ThriftBinaryCLIService.java
@@ -21,6 +21,7 @@
import java.net.InetSocketAddress;
import org.apache.hadoop.hive.conf.HiveConf.ConfVars;
+import org.apache.hadoop.hive.metastore.TServerSocketKeepAlive;
import org.apache.hive.service.auth.HiveAuthFactory;
import org.apache.hive.service.cli.CLIService;
import org.apache.thrift.TProcessorFactory;
@@ -76,6 +77,12 @@ public void run() {
serverSocket = HiveAuthFactory.getServerSSLSocket(hiveHost, portNum,
keyStorePath, hiveConf.getVar(ConfVars.HIVE_SERVER2_SSL_KEYSTORE_PASSWORD));
}
+
+ boolean keepAlive = hiveConf.getBoolVar(ConfVars.HIVE_SERVER2_TCP_KEEP_ALIVE);
+ if (keepAlive) {
+ serverSocket = new TServerSocketKeepAlive(serverSocket.getServerSocket());
+ }
+
TThreadPoolServer.Args sargs = new TThreadPoolServer.Args(serverSocket)
.processorFactory(processorFactory)
.transportFactory(transportFactory)