MAPR 5.0上的Spark 2.1

时间:2017-03-02 04:48:57

标签: apache-spark mapr

我在Mapr 5.0上运行Spark 2.1

我在本地模式下启动Spark时遇到异常

我的火花默认(重要配置)

spark.sql.hive.metastore.version 0.13.1
spark.sql.hive.metastore.jars 
                          /opt/mapr/lib/maprfs-5.0.0-mapr.jar:
                          /opt/mapr/hadoop/hadoop-0.20.2/conf:
                          /opt/mapr/hadoop/hadoop-0.20.2/lib/protobuf-java-2.5.0.jar:

                          /opt/hadoopgpl/lib/hadoop-lzo.jar:
                          /opt/mapr/hadoop/hadoop-2.7.0/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.7.0-mapr-1506.jar:
                          /opt/mapr/hadoop/hadoop-0.20.2/lib/commons-logging-1.1.1.jar:
                          /opt/mapr/hadoop/hadoop-0.20.2/lib/hadoop-auth-2.7.0-mapr-1506.jar:
                          /opt/mapr/lib/libprotodefs-5.0.0-mapr.jar:
                          /opt/mapr/lib/baseutils-5.0.0-mapr.jar:
                          /opt/mapr/hadoop/hadoop-0.20.2/lib/guava-13.0.1.jar:
                          /opt/mapr/hadoop/hadoop-0.20.2/lib/hadoop-common-2.7.0-mapr-1506.jar:
                          /opt/mapr/hadoop/hadoop-0.20.2/lib/commons-configuration-1.6.jar

spark.sql.hive.metastore.sharedPrefixes com.mysql.jdbc,org.postgresql,com.microsoft.sqlserver,oracle.jdbc,com.mapr.fs.shim.LibraryLoader,com.mapr.security.JNISecurity,com.mapr.fs.jni,com.mapr.fs.shim


java.lang.LinkageError: loader (instance of  org/apache/spark/sql/hive/client/IsolatedClientLoader$$anon$1): attempted  duplicate class definition for name: "com/mapr/fs/jni/MapRConstants"
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
... 104 more
java.lang.IllegalArgumentException: Error while instantiating   
'org.apache.spark.sql.hive.HiveSessionState':

请帮助我

1 个答案:

答案 0 :(得分:0)

我遇到过同样的问题。 当使用spark-submit运行我的Spark作业时,一切正常但在本地运行它会重现同样的问题。

深入MapR社区发布了这篇文章:https://community.mapr.com/thread/21262-spark-todf-returns-linkage-error-duplicate-class-definition#comments

此外,您会注意到在此文件中的spark-defaults.conf中有以下配置键:spark.sql.hive.metastore.sharedPrefixes

因此,在SparkConf中添加此键 spark.sql.hive.metastore.sharedPrefixes 修复了我的问题。

以下是对此密钥的解释:

  

应使用加载的逗号分隔的类前缀列表   Spark SQL与特定的共享的类加载器   Hive的版本。应该共享的类的示例是JDBC   需要与Metastore交谈的驱动程序。其他课程   需要共享的是那些与类交互的人   已经分享了。例如,log4j使用的自定义appender。

您可以在此处详细了解:https://spark.apache.org/docs/2.1.0/sql-programming-guide.html