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)