Spark執行在EMR Jar包(guava)衝突問題
阿新 • • 發佈:2019-02-16
問題描述:
執行環境: EMR 使用Spark 1.6.3, 這個版本的Spark主要依賴的包- guava-14.0.1
- commons-configuration-1.6
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 \ 即可使用自己的jar包執行 目前看到的對這兩個引數的解釋,並沒有太懂
--jars | 逗號分隔的本地jar包,包含在driver和executor的classpath下 |
--driver-class-path | 傳給driver的額外的類路徑 |
Meaning: Extra classpath entries to prepend to the classpath of the driver.
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