我在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':
请帮助我
答案 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