0
点赞
收藏
分享

微信扫一扫

spark(scala版本)提交jar到集群环境的常见问题

zhyuzh3d 2022-02-28 阅读 57

1. 找不到启动类

原因是没有编译启动类,造成没有编译的pom.xml插件配置如下。

<!-- 该插件用于将 Scala 代码编译成 class 文件 -->
      <plugin>
        <groupId>net.alchim31.maven</groupId>
        <artifactId>scala-maven-plugin</artifactId>
        <version>3.2.2</version>
        <executions>
          <execution>
            <!-- 声明绑定到 maven 的 compile 阶段 -->
            <goals>
              <goal>testCompile</goal>
            </goals>            
          </execution>
        </executions>
      </plugin>

上面的配置,刚开始的时候可以编译 ,后来就不编译.scala文件了,导致submit提交任务时找不到类。将配置修改如下:

<!-- 该插件用于将 Scala 代码编译成 class 文件 -->
      <plugin>
        <groupId>net.alchim31.maven</groupId>
        <artifactId>scala-maven-plugin</artifactId>
        <version>3.2.2</version>
        <executions>
          <execution>
            <!-- 声明绑定到 maven 的 compile 阶段 -->
            <goals>
              <goal>compile</goal>
            </goals>
            <configuration>
              <!--includes是一个数组,包含要编译的code-->
              <includes>
                <include>**/*.scala</include>
              </includes>
            </configuration>
          </execution>
        </executions>
      </plugin>

2. 不显示运行应用问题 Running Applications (0)的问题

集群环境版本为spark 3.2.1,打包的依赖是2.4.8,pom.xml文件指定如下:

    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-core_2.12</artifactId>
      <version>2.4.8</version>
    </dependency>

    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-streaming_2.12</artifactId>
      <version>2.4.8</version>
    </dependency>

版本不一致导致了应用不显示,采用3.2.1版本进行打包。

<dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-core_2.12</artifactId>
      <version>3.2.1</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-streaming_2.12</artifactId>
      <version>3.2.1</version>
      <scope>provided</scope>
    </dependency>

3. 集群环境有的包,pom.xml配置依赖时使用provided

在集群环境中,spark-core_2.12-3.2.1.jar和spark-streaming_2.12-3.2.1.jar在集群环境中已经存在了,在配置pom.xml文件时,指定provided。

<dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-core_2.12</artifactId>
      <version>3.2.1</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-streaming_2.12</artifactId>
      <version>3.2.1</version>
      <scope>provided</scope>
    </dependency>

打包依赖版本,最好能够与运行环境保持一致,版本不一致可能会导致一些不可控的问题。

4. 打包环境版本与运行环境版本应一致

在spark 2.4.8版本时,使用kafka组件总是出现各种错误(包括找不到类的方法),导致程序无法启动。

java.lang.NoSuchMethodError: org.apache.spark.internal.Logging.$init

后来直接升级到spark 3.2.1,问题得到解决。

举报

相关推荐

0 条评论