欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SparkClassNotFoundException: xxx

程序员文章站 2022-06-02 20:14:07
...

问题原因:

spark应用在计算时使用到第三方依赖jar包,在spark集群运行时如果没有提供此jar包
则会发生java.lang.ClassNotFoundException

解决办法:

第一种方法: 将第三方依赖jar包,提前准备到spark集群的每一个计算节点(太麻烦不建议)
第二种方法: 提交spark应用的时候,添加参数,在线下载需要的第三方依赖(麻烦且有问题不建议)
第三种方案【推荐】:将第三方远程依赖,打包到计算应用中(推荐)

1.添加打包插件
# 1. 在maven配置文件中添加一个打包插件
<build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <!--这里要替换成jar包main方法所在类 -->
                            <mainClass>com.netzhuo.datasource.RDDCreatedByDB</mainClass>
                        </manifest>
                        <manifestEntries>
                            <Class-Path>.</Class-Path>
                        </manifestEntries>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id> <!-- this is used for inheritance merges -->
                        <phase>package</phase> <!-- 指定在打包节点执行jar包合并操作 -->
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

打包结束后会获得两个jar包:xxx.jarxxx-jar-with-dependencies.jar

  • 第一个jar包是不包含第三方依赖的普通jar包
  • 第二个jar包是包含第三方完整依赖的特殊jar包
提交完整的jar包即可解决!!!