Spark 提交任务时 Invalid signature file digest 错误

第一次用  spark-submit 提交任务,是 Scala 的程序,命令格式是

spark-submit --class <main-class> --master local[*] --name "My first Spark Job" spark-test-fat-1.0-SNAPSHOT.jar

结果报出错误

Exception in thread "main" java.lang.SecurityException: Invalid signature file digest for Manifest main attributes
at sun.security.util.SignatureFileVerifier.processImpl(SignatureFileVerifier.java:330)
at sun.security.util.SignatureFileVerifier.process(SignatureFileVerifier.java:263)
at java.util.jar.JarVerifier.processEntry(JarVerifier.java:318)
......
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:119)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

Google 查了下,是需要把 jar 文件中的 META-INF/*.RSA META-INF/*.DSA META-INF/*.SF 文件清理掉。我们可以执行如下命令从现有的 jar 中除去

zip -d <jar file name>.jar META-INF/*.RSA META-INF/*.DSA META-INF/*.SF

是因为 jar 包中包含有这些文件才造成提交 Spark 时验证文件签名摘要时失败。

由于我是采用 maven-shade-plugin 生成前面那个 fat(也就 uberjar) jar 包的,其实在配置这个构建插件的时候也可以不把 META-INF/*.RSA META-INF/*.DSA META-INF/*.SF 三种类型的文件包含在最终的 jar 包中。需要在生成 uberjar 时把它们排除掉,见下面的配置

这样后,再执行 mvn package 生成的 uberjar 包就可以成功被 spark-submit 提交了。

参考:Solving a Spark Invalid signature file digest for Manifest main attributes error

类别: Spark. 标签: . 阅读(16). 订阅评论. TrackBack.

Leave a Reply

Be the First to Comment!

avatar
wpDiscuz