Spark提交正在重新使用以前的jar

时间:2018-09-07 02:27:44

标签: java scala apache-spark spark-submit

我正在尝试通过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中并重新运行了作业。但是,该错误仍然存​​在。无论我做什么,似乎SPARK 正在重新使用我的初始版本的MySparkJob.jar ,因此我无法运行此jar的更新版本。

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

我尝试过:

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

我觉得我一定在做些愚蠢的事(发生了!)。我的问题是:

  • 我是否需要清除工作之间的火花?如果是这样,我需要清除什么,该位置在哪里?
  • spark是否有效地压缩了我的依赖关系并将其放置在某处?如果可以,在哪里?
  • 还有其他可能有用的看法吗?

1 个答案:

答案 0 :(得分:0)

所以..在发布此问题时,让我想到,考虑到我尝试过的所有内容,这根本没有任何意义,而且一定是我做错了什么。在检查了libs文件夹中包含的jar之后,似乎存在一个旧的sbt工件,(代码与sbt universal:stage一起打包)似乎是我的主库的旧版本(它肯定已经在常春藤缓存中徘徊了,但是由于未知的原因,sbt包含了它。因为它包含相同的主类,所以我认为Spark正在使用该代码而不是我正在提交的jar(可能与如何解析类路径有关)。从lib文件夹中删除此文件后,我的工作似乎运行良好,并使用了更新的代码。我现在有新的问题要解决((它们是分开的/不同的,因此我将不在这里包括它们并使问题复杂化)),但这似乎至少可以解释为什么我一直看到这种奇怪的行为。