概述
问题描述:
运行环境:
EMR 使用Spark 1.6.3, 这个版本的Spark主要依赖的包
- guava-14.0.1
- commons-configuration-1.6
问题:
Spark程序运行在EMR的时候发生Jar包冲突(主要是guava和commons-configuration两个包发生冲突), 程序中需要使用guava-20.0以及commons-configuration-1.10两个包,
本地运行没有问题,放在EMR上运行则报如下错误:
java.lang.NoSuchMethodError: org.apache.commons.configuration.MapConfiguration.<init>(Ljava/util/Properties;)V
这应该是程序在运行时默认使用了的EMR本地的jar包(可能由于配置问题,查看了配置文件没找到相关配置),由于不知道EMR的jar包如何更新,遂采用以下方式解决
解决方案:
在spark-submit的时候增加 :
--driver-class-path $PROJECT_HOME/guava-20.0.jar:$PROJECT_HOME/commons-configuration-1.10.jar
--jars $PROJECT_HOME/guava-20.0.jar,$PROJECT_HOME/commons-configuration-1.10.jar
--jars $PROJECT_HOME/guava-20.0.jar,$PROJECT_HOME/commons-configuration-1.10.jar
即可使用自己的jar包运行
目前看到的对这两个参数的解释,并没有太懂
--jars | 逗号分隔的本地jar包,包含在driver和executor的classpath下 |
--driver-class-path | 传给driver的额外的类路径 |
2017-07-13
Property Name: spark.driver.extraClassPath
Meaning: Extra classpath entries to prepend to the classpath of the driver.
Note: In client mode, this config must not be set through the
Note: In client mode, this config must not be set through the
SparkConf
directly in your application, because the driver JVM has already started at that point. Instead, please set this through the --driver-class-path
command line option or in your default properties file.找到官方文档对 --driver-class-path 的介绍,应该是: 加在 drvier的classpath之前的额外classpath入口, 非client模式下也可通过spark的default.conf的spark.driver.extraClassPath参数进行配置
(持续更新中...)
参考
http://www.aboutyun.com/thread-20517-1-1.html
https://github.com/endymecy/spark-config-and-tuning/blob/master/config.md
最后
以上就是单身书包为你收集整理的Spark运行在EMR Jar包(guava)冲突问题问题描述:解决方案:的全部内容,希望文章能够帮你解决Spark运行在EMR Jar包(guava)冲突问题问题描述:解决方案:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复