diff options
3 files changed, 33 insertions, 7 deletions
diff --git a/sql/hive/pom.xml b/sql/hive/pom.xml index 61504becf1..177b6884fa 100644 --- a/sql/hive/pom.xml +++ b/sql/hive/pom.xml @@ -73,10 +73,6 @@ <version>${protobuf.version}</version> </dependency> --> - <dependency> - <groupId>${hive.group}</groupId> - <artifactId>hive-cli</artifactId> - </dependency> <!-- <dependency> <groupId>${hive.group}</groupId> @@ -225,6 +221,27 @@ <argLine>-da -Xmx3g -XX:MaxPermSize=${MaxPermGen} -XX:ReservedCodeCacheSize=512m</argLine> </configuration> </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-enforcer-plugin</artifactId> + <executions> + <execution> + <id>enforce-versions</id> + <goals> + <goal>enforce</goal> + </goals> + <configuration> + <rules> + <bannedDependencies> + <excludes combine.children="append"> + <exclude>*:hive-cli</exclude> + </excludes> + </bannedDependencies> + </rules> + </configuration> + </execution> + </executions> + </plugin> </plugins> </build> </project> 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") |