【发布时间】:2015-06-19 12:41:27
【问题描述】:
我在 Spark/scala 中编写了一个脚本来处理一个大图,并且可以在 Spark 源代码项目(下载版本 1.2.1)中的 Intellij 14 上编译/运行它。我现在要做的是构建 Uber jar 来创建一个可执行文件,我可以上传到 EC2 并运行。我知道应该为项目创建胖罐的插件。但是我不知道如何做到这一点 - 两个插件都只是为每个模块创建“超级”罐子而不是主罐子。
明确一点:我尝试了 Maven-Assembly 和 Maven-Shade 插件,每次它创建 10 个主 jar(分别称为“具有依赖项的 jar”或 Uber)而不是一个主 jar。它正在为 core_2.10 创建一个 Uber,为 streaming_2.10 创建另一个,为 graphx_2.10 创建另一个,等等。
我已尝试更改 Maven 插件的设置和配置。例如,我尝试将其添加到 Shade 插件中:
<configuration>
<shadedArtifactAttached>false</shadedArtifactAttached>
<artifactSet>
<includes>
<include>org.spark-project.spark:unused</include>
</includes>
</artifactSet>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
我也尝试了替代的 Maven-assembly 插件:
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>org.apache.spark.examples.graphx.PageRankGraphX</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
我还要指出,我已经尝试了许多在线插件设置的变体,但都没有奏效。很明显,项目设置有问题。然而,这不是我的项目——它是 Apache Spark 的源代码安装,所以我不知道为什么它会如此不可能构建。
我正在使用命令行创建构建
mvn package -DskipTests
非常感谢您的帮助和建议。
编辑:
进一步调查显示,最终模块中的许多 Spark 模块依赖项在 pom 中设置为“已提供”(即 org.spark.graphx、org.spark.streaming、org.spark.mlib 等) .但是,为这个“最终”模块(示例模块)运行 jar 无法在这些模块中找到类(即那些依赖项)。也许有更多经验的人知道这意味着什么。
【问题讨论】:
-
看看这个答案能不能帮到你:stackoverflow.com/questions/29394920/#29421067
-
谢谢布鲁诺。我已经尝试了这两个插件,但不幸的是它没有工作 - 他们为每个模块创建“uber”或“jar-with-dependencies”jar - 他们无法为整个 Spark 项目创建单个 jar。
标签: maven jar apache-spark executable-jar spark-streaming