我是靠谱客的博主 单身书包,最近开发中收集的这篇文章主要介绍Spark运行在EMR Jar包(guava)冲突问题问题描述:解决方案:,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

问题描述:


     运行环境:

         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
     即可使用自己的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 theSparkConf 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)冲突问题问题描述:解决方案:所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部