【问题标题】:Submitting spring boot application jar to spark-submit提交 Spring Boot 应用程序 jar 到 spark-submit
【发布时间】:2020-05-14 21:55:28
【问题描述】:

我对 spark 很陌生,我正在尝试使用 spark 提交。我在 spring boot 中创建了一个应用程序,使用 mvn package 创建了一个 jar 。但是当我尝试将 jar 提交给 spark-submit 时,它 无法找到 Main 类。但是主类存在于 jar 中。

 spark-submit --class com.dip.sparkapp.SparkappApplication --master local target/sparkapp-0.0.1-SNAPSHOT.jar

【问题讨论】:

  • 如何打包您的 Spark 应用程序?有弹簧插件吗?
  • 是的。我正在使用 spring boot mvn 插件 org.springframework.bootspring-boot-maven-plugin

标签: spring apache-spark spring-boot


【解决方案1】:

实际上,在您发布此内容的同一天,我们也遇到了同样的问题。我们的解决方案是使用 maven 的 shade 插件来编辑我们的构建。我们发现,当使用 spring-boot-maven 插件打包时,它会将我们的类嵌套在 spark 不喜欢的 BOOT-INF/classes 中。我将粘贴相关部分,以便您可以在自己的应用程序中试用——祝您好运!

<build>
   <plugins>
      <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <version>${spring-boot-version}</version>
                </dependency>
            </dependencies>
            <configuration>
                <keepDependenciesWithProvidedScope>false</keepDependenciesWithProvidedScope>
                <createDependencyReducedPom>false</createDependencyReducedPom>
                <filters>
                    <filter>
                        <artifact>*:*</artifact>
                        <excludes>
                            <exclude>META-INF/*.SF</exclude>
                            <exclude>META-INF/*.DSA</exclude>
                            <exclude>META-INF/*.RSA</exclude>
                        </excludes>
                    </filter>
                </filters>
                <transformers>
                    <transformer
                            implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                        <resource>META-INF/spring.handlers</resource>
                    </transformer>
                    <transformer
                            implementation="org.springframework.boot.maven.PropertiesMergingResourceTransformer">
                        <resource>META-INF/spring.factories</resource>
                    </transformer>
                    <transformer
                            implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                        <resource>META-INF/spring.schemas</resource>
                    </transformer>
                    <transformer
                            implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
                    <transformer
                            implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass>${start-class}</mainClass>
                    </transformer>
                </transformers>
            </configuration>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

【讨论】:

    【解决方案2】:

    我发现只需从 spark-submit 中跳过类名即可,即 --class com.dip.sparkapp.SparkappApplication

    【讨论】:

      【解决方案3】:

      如果您使用的是 gradle,这将适用于影子插件:

      import com.github.jengelman.gradle.plugins.shadow.transformers.*
      
      ...
      
      plugins {
          id 'com.github.johnrengelman.shadow' version '2.0.4'
      }
      
      ...
      
      shadowJar {
          zip64 true
          mergeServiceFiles()
          append 'META-INF/spring.handlers'
          append 'META-INF/spring.schemas'
          append 'META-INF/spring.tooling'
          transform(PropertiesFileTransformer) {
              paths = ['META-INF/spring.factories' ]
              mergeStrategy = "append"
          }
      }
      

      取自这里:https://github.com/spring-projects/spring-boot/issues/1828#issuecomment-607352468

      【讨论】:

        【解决方案4】:

        这对我有用

        <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
            <manifestEntries>
                <Main-Class>packagename.classname</Main-Class>
            </manifestEntries>
        </transformer>
        

        【讨论】:

          猜你喜欢
          • 2015-10-06
          • 1970-01-01
          • 2017-12-25
          • 1970-01-01
          • 2017-08-26
          • 1970-01-01
          • 2018-09-04
          • 2017-10-14
          • 2020-01-19
          相关资源
          最近更新 更多