Spark如何从打包的jar中选择类
Posted
技术标签:
【中文标题】Spark如何从打包的jar中选择类【英文标题】:Spark how to prefer class from packaged jar 【发布时间】:2018-02-26 17:10:51 【问题描述】:我正在使用 sbt 程序集插件来创建一个 fat jar。我需要一些 jars,它们是默认 hadoop/spark 的一部分,但版本较新。
我希望 spark worker jvm 更喜欢与我的 fat jar 文件一起打包的版本,而不是默认的 hadoop/spark 发行版。我该怎么做?
【问题讨论】:
你确定你的 uber-jar 中有旧的类吗?您想用旧版本替换 Spark 的哪个部分? 对不起,我提出问题时犯了一个错误。我需要更新的罐子,但 spark 带有旧版本。现在,当我们提交 spark 作业时,jvm 包含来自 spark 和 hadoop 的 jar,然后来自 fat jar。但是,由于这些 jar 的旧版本已经包含在 spark 中,因此我添加到我的 fat jar 中的新版本将被丢弃。我希望 spark 使用这些较新的版本并丢弃来自默认 spark/hadoop 分发的任何冲突 jar。简而言之,我想拿后面在classpath中添加的jar。 您想替换 Spark 的哪个部分?我们在谈论什么罐子? 【参考方案1】:解决方案是在提交 spark 应用程序时在配置(--conf 选项)中设置 spark.driver,executor.userClassPathFirst。这将首先包括来自 uber jar 的 jar,然后来自 spark 类路径。
其他解决方案是在 sbt 程序集中使用阴影。并在我们的 uber jar 中遮蔽其先前版本包含在 spark 中的 jar。
【讨论】:
以上是关于Spark如何从打包的jar中选择类的主要内容,如果未能解决你的问题,请参考以下文章
用Intellij idea 编写Scala程序Spark2.0.0 依赖jar包如何解决
eclipse开发spark应用程序 spark2.1.0 导入哪个jar包
如何把ES-analysis分词器打成jar包导入至Eclipse,小白初学,求大神给个详细打包过程!