@@ -57,11 +57,11 @@ import org.apache.spark.sql.catalyst.util.CharVarcharUtils
5757import org .apache .spark .sql .connector .catalog .SupportsNamespaces ._
5858import org .apache .spark .sql .errors .{QueryCompilationErrors , QueryExecutionErrors }
5959import org .apache .spark .sql .execution .QueryExecutionException
60- import org .apache .spark .sql .hive .HiveExternalCatalog
60+ import org .apache .spark .sql .hive .{ HiveExternalCatalog , HiveUtils }
6161import org .apache .spark .sql .hive .HiveExternalCatalog .DATASOURCE_SCHEMA
6262import org .apache .spark .sql .internal .SQLConf
6363import 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