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

时间:2015-04-14 02:40:40

标签: maven jar apache-spark executable-jar spark-streaming

我已经在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模块)无法在这些模块中找到类(即那些依赖项)。也许有经验的人知道这意味着什么。

1 个答案:

答案 0 :(得分:0)

您正在寻找mvn package模块中assembly的产品。您无需添加或修改构建。

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