我已经在Spark / scala中编写了一个脚本来处理一个大图,并且可以在Spark源代码项目(下载版本1.2.1)内的Intellij 14上编译/运行它。我现在要做的就是构建Uber jar来创建一个可以上传到EC2并运行的可执行文件。我知道应该为项目创建胖罐的插件。但是,我无法弄清楚如何做到这一点 - 两个插件只是创造了超级'每个模块的罐子而不是主罐子。
要明确:我已经尝试了Maven-Assembly和Maven-Shade插件,并且每次创建10个主罐(分别称为带有依赖关系'或者Uber')而不是一个主要的罐子。它正在为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模块依赖项都设置为&#39;提供&#39;在pom中(可能是org.spark.graphx,org.spark.streaming,org.spark.mlib等)。但是,为了这个&#39;最终&#39;运行jar。 module(examples模块)无法在这些模块中找到类(即那些依赖项)。也许有经验的人知道这意味着什么。
答案 0 :(得分:0)
您正在寻找mvn package
模块中assembly
的产品。您无需添加或修改构建。
但是,捆绑超级jar可能不是在EC2上设置和运行群集的正确方法。在ec2
中有一个用于打开群集的脚本。然后你通常spark-submit
你的应用程序(包括没有Spark / Hadoop类)在集群中。