在Maven中构建Spark Uber jar,而不是多个Uber jar(每个模块一个)



我已经用Spark/scala编写了一个处理大型图的脚本,并可以在Spark源代码项目(下载版本1.2.1)中的Intellij 14上编译/运行它。我现在要做的是构建Uber jar,创建一个可以上传到EC2并运行的可执行文件。我知道应该为项目创建胖罐子的插件。然而,我不知道如何做到这一点——这两个插件只是为每个模块创建"uber"jar,而不是一个主jar。

需要明确的是:我尝试过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组装插件:

<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中被设置为"provided"(即org.park.graphx、org.park.streaming、org.parK.mlib等)。然而,为这个"最终"模块(examples模块)运行jar无法在这些模块中找到类(即那些依赖项)。也许更有经验的人知道这意味着什么。

您正在assembly模块中查找mvn package的产品。您不需要添加或修改生成。

然而,绑定uber jar可能不是在EC2上设置和运行集群的正确方式。ec2中有一个用于打开集群的脚本。然后,您通常在集群中spark-submit您的应用程序(不包括Spark/Hadoop类)。

最新更新