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 时把它们排除掉,见下面的配置

 1<plugin><br/>
 2    <groupId>org.apache.maven.plugins</groupId><br/>
 3    <artifactId>maven-shade-plugin</artifactId><br/>
 4    <version>3.0.0</version><br/>
 5    <executions><br/>
 6        <execution><br/>
 7            <phase>package</phase><br/>
 8            <goals><br/>
 9                <goal>shade</goal><br/>
10            </goals><br/>
11        </execution><br/>
12    </executions><br/>
13    <configuration><br/>
14        <filters><br/>
15            <filter><br/>
16                <artifact>*:*</artifact><br/>
17                <excludes><br/>
18                    <exclude>META-INF/*.SF</exclude><br/>
19                    <exclude>META-INF/*.DSA</exclude><br/>
20                    <exclude>META-INF/*.RSA</exclude><br/>
21                </excludes><br/>
22            </filter><br/>
23        </filters><br/>
24    </configuration><br/>
25</plugin>

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

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

永久链接 https://yanbin.blog/spark-submit-invalid-signature-file-digest-error/, 来自 隔叶黄莺 Yanbin's Blog
[版权声明] 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。