[ 
https://issues.apache.org/jira/browse/SPARK-17088?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Marcelo Vanzin resolved SPARK-17088.
------------------------------------
       Resolution: Fixed
    Fix Version/s: 2.4.0

Issue resolved by pull request 20169
[https://github.com/apache/spark/pull/20169]

> IsolatedClientLoader fails to load Hive client when sharesHadoopClasses is 
> false
> --------------------------------------------------------------------------------
>
>                 Key: SPARK-17088
>                 URL: https://issues.apache.org/jira/browse/SPARK-17088
>             Project: Spark
>          Issue Type: Bug
>          Components: SQL
>            Reporter: Marcelo Vanzin
>            Assignee: Marcelo Vanzin
>            Priority: Minor
>             Fix For: 2.4.0
>
>
> There's a bug in a very rare code path in {{IsolatedClientLoader}}:
> {code}
>           case e: RuntimeException if e.getMessage.contains("hadoop") =>
>             // If the error message contains hadoop, it is probably because 
> the hadoop
>             // version cannot be resolved (e.g. it is a vendor specific 
> version like
>             // 2.0.0-cdh4.1.1). If it is the case, we will try just
>             // "org.apache.hadoop:hadoop-client:2.4.0". 
> "org.apache.hadoop:hadoop-client:2.4.0"
>             // is used just because we used to hard code it as the hadoop 
> artifact to download.
>             logWarning(s"Failed to resolve Hadoop artifacts for the version 
> ${hadoopVersion}. " +
>               s"We will change the hadoop version from ${hadoopVersion} to 
> 2.4.0 and try again. " +
>               "Hadoop classes will not be shared between Spark and Hive 
> metastore client. " +
>               "It is recommended to set jars used by Hive metastore client 
> through " +
>               "spark.sql.hive.metastore.jars in the production environment.")
>             sharesHadoopClasses = false
> {code}
> That's the rare part. But when {{sharesHadoopClasses}} is set to false, the 
> instantiation of {{HiveClientImpl}} fails:
> {code}
>       classLoader
>         .loadClass(classOf[HiveClientImpl].getName)
>         .getConstructors.head
>         .newInstance(version, sparkConf, hadoopConf, config, classLoader, 
> this)
>         .asInstanceOf[HiveClient]
> {code}
> {{hadoopConf}} here is an instance of {{Configuration}} loaded by the main 
> Spark class loader, but in this case {{HiveClientImpl}} expects an instance 
> of {{Configuration}} loaded by the isolated class loader (yay class loaders 
> are fun). So you get an error like this:
> {noformat}
> 2016-08-10 13:51:20.742 - stderr> Exception in thread "main" 
> java.lang.IllegalArgumentException: argument type mismatch
> 2016-08-10 13:51:20.743 - stderr>     at 
> sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
> 2016-08-10 13:51:20.743 - stderr>     at 
> sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
> 2016-08-10 13:51:20.743 - stderr>     at 
> sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
> 2016-08-10 13:51:20.743 - stderr>     at 
> java.lang.reflect.Constructor.newInstance(Constructor.java:526)
> 2016-08-10 13:51:20.744 - stderr>     at 
> org.apache.spark.sql.hive.client.IsolatedClientLoader.createClient(IsolatedClientLoader.scala:264)
> 2016-08-10 13:51:20.744 - stderr>     at 
> org.apache.spark.sql.hive.HiveUtils$.newClientForMetadata(HiveUtils.scala:354)
> 2016-08-10 13:51:20.744 - stderr>     at 
> org.apache.spark.sql.hive.HiveUtils$.newClientForMetadata(HiveUtils.scala:258)
> 2016-08-10 13:51:20.744 - stderr>     at 
> org.apache.spark.sql.hive.HiveSharedState.metadataHive$lzycompute(HiveSharedState.scala:39)
> 2016-08-10 13:51:20.745 - stderr>     at 
> org.apache.spark.sql.hive.HiveSharedState.metadataHive(HiveSharedState.scala:38)
> {noformat}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@spark.apache.org
For additional commands, e-mail: issues-h...@spark.apache.org

Reply via email to