【问题标题】:Build Spark Uber jar in Maven instead of multiple Uber jars (one per module)在 Maven 中构建 Spark Uber jar,而不是多个 Uber jar(每个模块一个)
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

  • 嗨,肖恩,我检查了在 assembly/target/scala-2.10 中创建的 jar。但是,示例类不存在。所以如果我想运行那个 jar 它是行不通的。您对 EC2 的提示听起来是个好主意,但是深入了解为什么这不起作用仍然会很好。
  • 另外,我不确定在开发环境和 EC2 脚本之间来回切换是如何工作的。例如,传递 masterURL 等参数似乎与提交脚本不兼容,但这是确保某些东西在本地工作的唯一方法。
  • 是的,示例不是程序集的一部分,因为它们不是 Spark 服务的一部分——它们是用户空间示例。示例在示例/目标中创建。查看 ec2 目录中的脚本和文档。
猜你喜欢
  • 2021-01-22
  • 1970-01-01
  • 2022-01-26
  • 2016-12-30
  • 2016-08-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-27
  • 1970-01-01
相关资源
最近更新 更多