Spark-submit正在重复使用之前的jar

问题描述 投票:0回答:1

我试图通过spark submit运行一个简单的工作。我这样做如下:

spark-submit --class com.my.namespace.MyJobClass  --master local --deploy-mode client --conf spark.driver.extraClassPath=$(echo ./lib/*.jar | tr ' ' ':')  --verbose    hdfs://tmp/jars/mySparkJob.jar  args 

(请注意,我已将所有类名等重命名为“MyJob”样式,以使事情变得更简单)。作业提交正常,主类解析得很好,我正在解决所有依赖项而没有问题。

但是,在我最初的运行中,我发现了MyJobClass中的一个错误。所以我解决了这个问题,重新打包MySparkJob.jar,把它放回HDFS并重新开始工作。但是,这个bug仍然存在。无论我做什么,似乎SPARK重新使用我的初始版本的MySparkJob.jar所以我无法运行这个jar的更新版本。

我正在使用spark 2.1.0(mapr版本:Running Spark version 2.1.0-mapr-1801

我试过了:

  • 从本地和集群模式的spark运行
  • 反编译jar以确保代码更改存在
  • 重命名jar并运行它 - 莫名其妙地它仍然使用旧代码!
  • 使用固定jar的本地和基于hdfs的版本
  • 重新启动资源管理器
  • 删除spark.yarn.archive - > maprfs:///apps/spark/spark-jars.zip

我觉得我必须做一些愚蠢的事情(它发生了!)。我的问题是:

  • 我需要清除工作之间的火花吗?如果是这样,我需要清楚什么,这位于何处?
  • 火花有效拉链我的依赖并将它们放在某个地方吗?如果是这样的话?
  • 任何其他可能有帮助的观察?
java scala apache-spark spark-submit
1个回答
0
投票

所以..在发布这个问题时,它让我觉得在我尝试过的所有事情都没有任何意义,并且它一定是我做错了。在检查了libs文件夹中包含的罐子之后,似乎存在一个旧的sbt工件,(代码与sbt universal:stage打包),这似乎是我的主lib的旧版本(必须在常春藤中闲置缓存或其他东西,但由于原因未知,sbt包括它)。由于它包含相同的主类,我相信Spark使用的代码与我提交的jar(可能与类路径的解析方式有关)。从lib文件夹中删除此文件后,我的作业似乎运行正常并使用较新的代码。我现在有新的问题需要解决,(它们是分开/不同的所以我不会在这里包括它们并且回答这个问题),但这似乎至少解释了为什么我一直看到这种奇怪的行为。

© www.soinside.com 2019 - 2024. All rights reserved.