diff --git a/externals/kyuubi-hive-sql-engine/pom.xml b/externals/kyuubi-hive-sql-engine/pom.xml
index caed7e27c37..89f2395f043 100644
--- a/externals/kyuubi-hive-sql-engine/pom.xml
+++ b/externals/kyuubi-hive-sql-engine/pom.xml
@@ -50,18 +50,6 @@
${project.version}
-
- org.apache.hive
- hive-service-rpc
- provided
-
-
-
- org.apache.thrift
- libfb303
- provided
-
-
com.google.code.findbugs
jsr305
@@ -73,12 +61,6 @@
commons-collections
-
- org.apache.thrift
- libthrift
- provided
-
-
com.google.guava
failureaccess
@@ -206,6 +188,18 @@
+
+
+ com.fasterxml.jackson
+ ${kyuubi.shade.packageName}.com.fasterxml.jackson
+
+ com.fasterxml.jackson.**
+
+
+
+
+
+
diff --git a/externals/kyuubi-hive-sql-engine/src/main/scala/org/apache/kyuubi/engine/hive/session/HiveSessionManager.scala b/externals/kyuubi-hive-sql-engine/src/main/scala/org/apache/kyuubi/engine/hive/session/HiveSessionManager.scala
index d09912770cc..da6879d7ecc 100644
--- a/externals/kyuubi-hive-sql-engine/src/main/scala/org/apache/kyuubi/engine/hive/session/HiveSessionManager.scala
+++ b/externals/kyuubi-hive-sql-engine/src/main/scala/org/apache/kyuubi/engine/hive/session/HiveSessionManager.scala
@@ -18,6 +18,7 @@
package org.apache.kyuubi.engine.hive.session
import java.io.File
+import java.util.{List => JList}
import java.util.concurrent.Future
import scala.collection.JavaConverters._
@@ -34,6 +35,7 @@ import org.apache.kyuubi.engine.hive.HiveSQLEngine
import org.apache.kyuubi.engine.hive.operation.HiveOperationManager
import org.apache.kyuubi.operation.OperationManager
import org.apache.kyuubi.session.{Session, SessionHandle, SessionManager}
+import org.apache.kyuubi.util.reflect.DynConstructors
class HiveSessionManager(engine: HiveSQLEngine) extends SessionManager("HiveSessionManager") {
override protected def isServer: Boolean = false
@@ -78,15 +80,37 @@ class HiveSessionManager(engine: HiveSQLEngine) extends SessionManager("HiveSess
val sessionHandle =
conf.get(KYUUBI_SESSION_HANDLE_KEY).map(SessionHandle.fromUUID).getOrElse(SessionHandle())
val hive = {
- val sessionWithUGI = new ImportedHiveSessionImpl(
- new ImportedSessionHandle(sessionHandle.toTSessionHandle, protocol),
- protocol,
- user,
- password,
- HiveSQLEngine.hiveConf,
- ipAddress,
- null,
- Seq(ipAddress).asJava)
+
+ val sessionWithUGI = DynConstructors.builder()
+ .impl( // for Hive 3.1
+ classOf[ImportedHiveSessionImpl],
+ classOf[ImportedSessionHandle],
+ classOf[TProtocolVersion],
+ classOf[String],
+ classOf[String],
+ classOf[HiveConf],
+ classOf[String],
+ classOf[String],
+ classOf[JList[String]])
+ .impl( // for Hive 2.3
+ classOf[ImportedHiveSessionImpl],
+ classOf[ImportedSessionHandle],
+ classOf[TProtocolVersion],
+ classOf[String],
+ classOf[String],
+ classOf[HiveConf],
+ classOf[String],
+ classOf[String])
+ .build[ImportedHiveSessionImpl]()
+ .newInstance(
+ new ImportedSessionHandle(sessionHandle.toTSessionHandle, protocol),
+ protocol,
+ user,
+ password,
+ HiveSQLEngine.hiveConf,
+ ipAddress,
+ null,
+ Seq(ipAddress).asJava)
val proxy = HiveSessionProxy.getProxy(sessionWithUGI, sessionWithUGI.getSessionUgi)
sessionWithUGI.setProxySession(proxy)
proxy