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