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

本文主要探讨了Spark应用开发中遇到的两类问题及其解决方案。一是启动类找不到,原因是Scala代码未正确编译,通过修正maven的scala-maven-plugin配置解决了此问题。二是运行应用不显示,问题出在打包依赖版本与集群环境不一致,更新为与集群相同的Spark3.2.1版本后问题解决。此外,还强调了在pom.xml中使用`provided`范围来处理集群已有的Spark依赖,以避免版本冲突。最后,提到了打包环境与运行环境版本一致性的重要性,特别是在遇到类方法找不到等错误时,升级版本可能是有效的解决策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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,问题得到解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿20

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值