我正在构建一个spark应用程序,我想生成两个单独的shaded.jar文件,分别对应于以下每个上下文:
对于master=local模式,我需要一个可以用 java -jar shaded-for-local-mode.jar
. 这应该包括所有依赖项,包括正在使用的spark和hadoop依赖项。
对于分布式模式,我需要一个排除spark和hadoop库的.jar文件( org.apache.hadoop:*
)这样它们就不会与 spark-submit
(spark docs),但我还想包括 org.apache.hadoop
组( org.apache.hadoop:hadoop-aws
)因为它不是由运行时环境提供的。
这个答案解释了如何使用两个单独的 <execution>
块,但是我很难让排除项按我想要的方式工作。
这是相关的阴影 <execution>
:
<execution>
<id>shade-spark-submit</id>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<shadedClassifierName>shaded-spark-submit</shadedClassifierName>
<artifactSet>
<excludes>
<exclude>org.apache.spark:*</exclude>
<!-- We want hadoop-aws, an explicit dependency of this project, but not any of the other hadoop packages. -->
<exclude>org.apache.hadoop:hadoop-auth</exclude>
<exclude>org.apache.hadoop:hadoop-common</exclude>
<exclude>org.apache.hadoop:hadoop-annotations</exclude>
</excludes>
</artifactSet>
<finalName>${project.artifactId}-${project.version}-shade-spark-submit</finalName>
</configuration>
</execution>
我担心的是 <exclude>
语句显式地排除我所知道的特定包,这与我的目标略有不同:我希望始终排除 org.apache.hadoop:*
(即使是我不知道的)但是包括 org.apache.hadoop:hadoop-aws
. shade的文档没有完全描述如何 <include>
以及 <exclude>
标记已处理。
谢谢!
暂无答案!
目前还没有任何答案,快来回答吧!