当前位置: 首页 > 知识库问答 >
问题:

如何编译/打包Spark 2.0项目与外部罐和Maven

万俟嘉珍
2023-03-14

从2.0版开始,ApacheSpark与一个文件夹“jars”捆绑在一起,该文件夹中充满了。jar文件。显然,Maven会在发布以下文件时下载所有这些JAR:

mvn -e package

因为为了提交申请

spark-submit --class DataFetch target/DataFetch-1.0-SNAPSHOT.jar

DataFetch-1.0-SNAPSHOT。需要一个罐子。

所以,第一个问题很简单,我如何利用这些现有的罐子?。第二个问题是相关的,儿子,我第一次尝试用Maven下载罐子,我得到了以下输出:

[INFO] Error stacktraces are turned on.
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building "DataFetch" 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.5:resources (default-resources) @DataFetch ---
[debug] execute contextualize
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory     /root/sparkTests/scalaScripts/DataFetch/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.0:compile (default-compile) @ DataFetch -    --
[INFO] No sources to compile
[INFO]
[INFO] --- maven-resources-plugin:2.5:testResources (default-testResources) @ DataFetch ---
[debug] execute contextualize
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory/root/sparkTests/scalaScripts/DataFetch/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.0:testCompile (default-testCompile) @ DataFetch ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-surefire-plugin:2.10:test (default-test) @ DataFetch ---
[INFO] No tests to run.
[INFO] Surefire report directory: /root/sparkTests/scalaScripts/DataFetch/target/surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------

Results :

Tests run: 0, Failures: 0, Errors: 0, Skipped: 0

[INFO]
[INFO] --- maven-jar-plugin:2.3.2:jar (default-jar) @ DataFetch---
[WARNING] JAR will be empty - no content was marked for inclusion!
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.294s
[INFO] Finished at: Wed Sep 28 17:41:29 PYT 2016
[INFO] Final Memory: 14M/71M
[INFO] ------------------------------------------------------------------------

这是我的pom。xml文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.spark.pg</groupId>
  <artifactId>DataFetch</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>
  <name>"DataFetch"</name>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

    <dependencies>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.11</artifactId>
            <version>2.0.0</version>
        </dependency>
    </dependencies>

     <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.0</version>
            </plugin>
        </plugins>
    </build>  

</project>

如果需要更多信息,请毫不犹豫地询问。

共有1个答案

唐和洽
2023-03-14

我不确定我是否理解你的问题,但我试着回答。

基于火花捆绑您的应用程序的依赖留档:

创建组装JAR时,将Spark和Hadoop列为提供的依赖项;它们不需要捆绑,因为它们是由集群管理器在运行时提供的。

您可以将范围设置为maven pom中提供的范围。xml文件

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-core_2.11</artifactId>
    <version>${spark.version}</version>
    <!-- add this scope -->
    <scope>provided</scope>
</dependency>

我注意到的第二个想法是maven构建创建空JAR。

[WARNING] JAR will be empty - no content was marked for inclusion!

如果您有任何其他依赖项,您应该将这些依赖项打包到最终jar存档文件中。

您可以在pom.xml中执行如下操作并运行mvn包:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.6</version>
        <configuration>
            <!-- package with project dependencies -->
            <descriptorRefs>
                <descriptorRef>jar-with-dependencies</descriptorRef>
            </descriptorRefs>
            <archive>
              <manifest>
                <mainClass>YOUR_MAIN_CLASS</mainClass>
              </manifest>
            </archive>
            </configuration>
            <executions>
              <execution>
                <id>make-assembly</id>
                <phase>package</phase>
                <goals>
                    <goal>single</goal>
                </goals>
              </execution>
            </executions>
    </plugin>

maven日志应打印与建筑jar行:

[INFO] --- maven-assembly-plugin:2.4.1:single (make-assembly) @ dateUtils ---
[INFO] Building jar: path/target/APPLICATION_NAME-jar-with-dependencies.jar

在目标文件夹中的maven打包阶段之后,您应该会看到DataFetch-1.0-SNAPSHOTjar-with-dependencies。你可以用spark submit来装饰这个罐子

 类似资料:
  • 现在我们知道如何使用 Go 以及它的标准库了,但是 Go 的生态要比这大的多。当着手自己的 Go 项目时,最好先查找下是否有些存在的第三方的包或者项目能不能使用。大多数可以通过 go install 来进行安装。 Go Walker 支持根据包名在海量数据中查询。 目前已经有许多非常好的外部库,如: MySQL(GoMySQL), PostgreSQL(go-pgsql), MongoDB (mg

  • 有人能给我一个解决方案吗?除了以下例外。我将创建一个多模块项目。 父项目名称为 ,子项目名称为 、 和 。 我需要有的war文件,其中应该包含、和。jar文件。 但是maven必须在父项目中打包。我怎样才能创建这样的项目?

  • 问题内容: 我是Maven的新手(以及hibernate的人),但想同时学习两者。我从hibernate.org下载了一个示例项目,现在尝试使用maven进行编译,但出现以下错误: [INFO]扫描项目…下载:http : //repo1.maven.org/maven2/org/hibernate/hibernate- parent/3.5.2- Final / hibernate-parent

  • 单模块 maven 项目打包 在单一模块的maven项目开发中,我们通常在 src/main/resources 编写我们的配置文件,因此,在 maven 构建的时候,我们需要添加如下配置: <resources> <resource> <directory>src/main/resources</directory> <includes>

  • 问题内容: 当我运行“清理并生成”时,仅在文件夹位于文件的同一文件夹时,才会运行正在创建的文件。 因此,如果我将jar文件移动到桌面并将该文件夹保留在该文件夹中,则jar文件将给我一个例外。 我该如何解决这个问题? 问题答案: 如果将jars复制到源代码目录中,它们将位于您的最终jar中。但是,我不确定这是否会在100%的时间内有效。 java-forum上有一篇很棒的文章,内容如下: 除了少数情

  • 当我试图在Windows的命令提示符中编译时,我有一个编译问题。我有如下目录设置我有我的. java文件在src目录(Main.java 当我尝试编译时,我会 但我明白 我不确定我会错在哪里。 我通过eclipse写了这个应用程序,它在eclipse中编译得很好,但是当我试图通过命令行来做它时,它不起作用。 此外,我碰巧发现eclipse已编译。类并尝试使用 但它还是给了我一个相关的错误