diff options
author | Josh Rosen <joshrosen@databricks.com> | 2016-04-20 22:50:27 -0700 |
---|---|---|
committer | Reynold Xin <rxin@databricks.com> | 2016-04-20 22:50:27 -0700 |
commit | cfe472a34ea8bbf2f7a04acbf0c6ab6c48d732ff (patch) | |
tree | 30d3b825de57b532db6e37a44da1ccd94af13003 /sql/hive/src | |
parent | 8045814114d41dc17130ebc71f9e48d28ca959ca (diff) | |
download | spark-cfe472a34ea8bbf2f7a04acbf0c6ab6c48d732ff.tar.gz spark-cfe472a34ea8bbf2f7a04acbf0c6ab6c48d732ff.tar.bz2 spark-cfe472a34ea8bbf2f7a04acbf0c6ab6c48d732ff.zip |
[SPARK-14786] Remove hive-cli dependency from hive subproject
The `hive` subproject currently depends on `hive-cli` in order to perform a check to see whether a `SessionState` is an instance of `org.apache.hadoop.hive.cli.CliSessionState` (see #9589). The introduction of this `hive-cli` dependency has caused problems for users whose Hive metastore JAR classpaths don't include the `hive-cli` classes (such as in #11495).
This patch removes this dependency on `hive-cli` and replaces the `isInstanceOf` check by reflection. I added a Maven Enforcer rule to ban `hive-cli` from the `hive` subproject in order to make sure that this dependency is not accidentally reintroduced.
/cc rxin yhuai adrian-wang preecet
Author: Josh Rosen <joshrosen@databricks.com>
Closes #12551 from JoshRosen/remove-hive-cli-dep-from-hive-subproject.
Diffstat (limited to 'sql/hive/src')
-rw-r--r-- | sql/hive/src/main/scala/org/apache/spark/sql/hive/client/HiveClientImpl.scala | 13 | ||||
-rw-r--r-- | sql/hive/src/main/scala/org/apache/spark/sql/hive/client/IsolatedClientLoader.scala | 2 |
2 files changed, 12 insertions, 3 deletions
diff --git a/sql/hive/src/main/scala/org/apache/spark/sql/hive/client/HiveClientImpl.scala b/sql/hive/src/main/scala/org/apache/spark/sql/hive/client/HiveClientImpl.scala index 69f7dbf6ce..703d991829 100644 --- a/sql/hive/src/main/scala/org/apache/spark/sql/hive/client/HiveClientImpl.scala +++ b/sql/hive/src/main/scala/org/apache/spark/sql/hive/client/HiveClientImpl.scala @@ -24,7 +24,6 @@ import scala.language.reflectiveCalls import org.apache.hadoop.conf.Configuration import org.apache.hadoop.fs.Path -import org.apache.hadoop.hive.cli.CliSessionState import org.apache.hadoop.hive.conf.HiveConf import org.apache.hadoop.hive.metastore.{PartitionDropOptions, TableType => HiveTableType} import org.apache.hadoop.hive.metastore.api.{Database => HiveDatabase, FieldSchema, Function => HiveFunction, FunctionType, PrincipalType, ResourceType, ResourceUri} @@ -110,10 +109,20 @@ private[hive] class HiveClientImpl( } } + def isCliSessionState(state: SessionState): Boolean = { + var temp: Class[_] = if (state != null) state.getClass else null + var found = false + while (temp != null && !found) { + found = temp.getName == "org.apache.hadoop.hive.cli.CliSessionState" + temp = temp.getSuperclass + } + found + } + val ret = try { // originState will be created if not exists, will never be null val originalState = SessionState.get() - if (originalState.isInstanceOf[CliSessionState]) { + if (isCliSessionState(originalState)) { // In `SparkSQLCLIDriver`, we have already started a `CliSessionState`, // which contains information like configurations from command line. Later // we call `SparkSQLEnv.init()` there, which would run into this part again. diff --git a/sql/hive/src/main/scala/org/apache/spark/sql/hive/client/IsolatedClientLoader.scala b/sql/hive/src/main/scala/org/apache/spark/sql/hive/client/IsolatedClientLoader.scala index f45264af34..1d502e01d9 100644 --- a/sql/hive/src/main/scala/org/apache/spark/sql/hive/client/IsolatedClientLoader.scala +++ b/sql/hive/src/main/scala/org/apache/spark/sql/hive/client/IsolatedClientLoader.scala @@ -103,7 +103,7 @@ private[hive] object IsolatedClientLoader extends Logging { hadoopVersion: String, ivyPath: Option[String]): Seq[URL] = { val hiveArtifacts = version.extraDeps ++ - Seq("hive-metastore", "hive-exec", "hive-common", "hive-serde", "hive-cli") + Seq("hive-metastore", "hive-exec", "hive-common", "hive-serde") .map(a => s"org.apache.hive:$a:${version.fullVersion}") ++ Seq("com.google.guava:guava:14.0.1", s"org.apache.hadoop:hadoop-client:$hadoopVersion") |