Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Maven中构建Spark Uber jar,而不是多个Uber jar(每个模块一个)_Maven_Jar_Apache Spark_Executable Jar_Spark Streaming - Fatal编程技术网

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

在Maven中构建Spark Uber jar,而不是多个Uber jar(每个模块一个),maven,jar,apache-spark,executable-jar,spark-streaming,Maven,Jar,Apache Spark,Executable Jar,Spark Streaming,我已经用Spark/scala编写了一个脚本来处理一个大型图形,并且可以在Spark源代码项目(下载版本1.2.1)的Intellij14上编译/运行它。我现在要做的是构建Uber jar,创建一个可执行文件,我可以上传到EC2并运行。我知道应该为项目创建胖罐子的插件。然而,我不知道如何做到这一点——这两个插件只是为每个模块创建“uber”jar,而不是一个主jar 明确地说:我已经尝试了Maven程序集和Maven Shade插件,每次它都创建了10个主jar(分别称为“带依赖项的jar”或U

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

明确地说:我已经尝试了Maven程序集和Maven Shade插件,每次它都创建了10个主jar(分别称为“带依赖项的jar”或Uber),而不是一个主jar。它正在为core_2.10、streaming_2.10和graphx_2.10创建一个Uber,等等

我尝试过改变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>
我将感谢您的帮助和建议

编辑:


进一步调查表明,最终模块中的许多Spark模块依赖项在pom中设置为“提供”(即org.Spark.graphx、org.Spark.streaming、org.Spark.mlib等)。但是,运行这个“最终”模块(示例模块)的jar无法在这些模块(即那些依赖项)中找到类。也许有经验的人知道这意味着什么。

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


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

看看这个答案是否对你有帮助:谢谢Bruno。我已经尝试了这两个插件,但不幸的是,它们没有成功——它们为每个模块创建了“uber”或“jar with dependencies”jar——它们没有为整个Spark项目创建一个jar。嗨,Sean,我检查了在assembly/target/scala-2.10中创建的jar。但是,示例类并不存在。所以,如果我想运行那个罐子,它不会工作。你给EC2的建议听起来是个好主意,但是如果能弄清楚为什么这不起作用,那还是很好的。另外,我也不确定这在开发环境和EC2脚本之间是如何起作用的。例如,传递masterURL等参数似乎与提交脚本不兼容,但这是确保某些东西在本地工作的唯一方法。是的,示例不是程序集的一部分,因为它们不是Spark服务的一部分——它们是用户空间示例。示例在示例/目标中创建。查看ec2目录中的脚本和文档。
<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>
mvn package -DskipTests