如何为spark应用程序构建着色jar以实现分布式和本地执行?

fivyi3re  于 2021-05-29  发布在  Hadoop
关注(0)|答案(0)|浏览(152)

我正在构建一个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> 标记已处理。
谢谢!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题