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