Skip to content

Commit 79bbc2c

Browse files
committed
initial commit
1 parent 4d21b94 commit 79bbc2c

File tree

1 file changed

+14
-4
lines changed

1 file changed

+14
-4
lines changed

sql/hive/src/main/scala/org/apache/spark/sql/hive/client/HiveClientImpl.scala

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,11 @@ import org.apache.spark.sql.catalyst.util.CharVarcharUtils
5757
import org.apache.spark.sql.connector.catalog.SupportsNamespaces._
5858
import org.apache.spark.sql.errors.{QueryCompilationErrors, QueryExecutionErrors}
5959
import org.apache.spark.sql.execution.QueryExecutionException
60-
import org.apache.spark.sql.hive.HiveExternalCatalog
60+
import org.apache.spark.sql.hive.{HiveExternalCatalog, HiveUtils}
6161
import org.apache.spark.sql.hive.HiveExternalCatalog.DATASOURCE_SCHEMA
6262
import org.apache.spark.sql.internal.SQLConf
6363
import org.apache.spark.sql.types._
64-
import org.apache.spark.util.{CircularBuffer, ShutdownHookManager, Utils}
64+
import org.apache.spark.util.{CircularBuffer, ShutdownHookManager, Utils, VersionUtils}
6565

6666
/**
6767
* A class that wraps the HiveClient and converts its responses to externally visible classes.
@@ -219,6 +219,16 @@ private[hive] class HiveClientImpl(
219219
hiveConf
220220
}
221221

222+
private def getHive(conf: HiveConf): Hive = {
223+
VersionUtils.majorMinorPatchVersion(version.fullVersion).map {
224+
case (2, 3, v) if v >= 9 => Hive.getWithoutRegisterFns(conf)
225+
case _ => Hive.get(conf)
226+
}.getOrElse {
227+
throw QueryExecutionErrors.unsupportedHiveMetastoreVersionError(
228+
version.fullVersion, HiveUtils.HIVE_METASTORE_VERSION.key)
229+
}
230+
}
231+
222232
override val userName = UserGroupInformation.getCurrentUser.getShortUserName
223233

224234
override def getConf(key: String, defaultValue: String): String = {
@@ -273,7 +283,7 @@ private[hive] class HiveClientImpl(
273283
if (clientLoader.cachedHive != null) {
274284
clientLoader.cachedHive.asInstanceOf[Hive]
275285
} else {
276-
val c = Hive.get(conf)
286+
val c = getHive(conf)
277287
clientLoader.cachedHive = c
278288
c
279289
}
@@ -303,7 +313,7 @@ private[hive] class HiveClientImpl(
303313
// with the side-effect of Hive.get(conf) to avoid using out-of-date HiveConf.
304314
// See discussion in https://github.com/apache/spark/pull/16826/files#r104606859
305315
// for more details.
306-
Hive.get(conf)
316+
getHive(conf)
307317
// setCurrentSessionState will use the classLoader associated
308318
// with the HiveConf in `state` to override the context class loader of the current
309319
// thread.

0 commit comments

Comments
 (0)