折腾了一晚上加一上午,总算解决了。

解决:

1.

21/04/13 20:55:27 INFO scheduler.EventLoggingListener: Logging events to hdfs://master:8020/directory/local-1618372526737
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/kafka/common/serialization/StringDeserializer

2.

使用maven 不加插件的打包 maven package 会打不上依赖包从而报错的问题
 

背景:使用windows写sparkstreaming和kafka整合的代码,提交到伪分布式系统ubuntu上运行,在windows上使用maven下载了依赖库,但是打包的时候不带依赖,在集群上运行会报错。

前前后后尝试了idea、sbt、maven打包,最终还是用maven打包成功了。

核心:配置POM打包插件

使用插件: scala-maven-plugin : 这个插件是编译scala代码的,之前一直没有添加这个插件,导致编译后的包里面找不到主类,也就是没有你要运行的那个object(class)文件

整体POM.XML

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>maven_kafka_test</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

  <!-- 以下是我sparkstreaming用到的两个依赖 -->
    <dependencies>

        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-streaming_2.11</artifactId>
            <version>2.4.7</version>
        </dependency>

        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-streaming-kafka-0-10_2.11</artifactId>
            <version>2.4.7</version>
        </dependency>
    </dependencies>


  
    <build>
        <plugins>
            <plugin>
            <!-- !!必须有这个插件,才可以编译scala代码找到主类,版本我是网上搞来的 -->
                <groupId>net.alchim31.maven</groupId>
                <artifactId>scala-maven-plugin</artifactId>
                <version>3.2.2</version>
                <executions>
                    <execution>
                        <id>compile-scala</id>
                        <phase>compile</phase>
                        <goals>
                            <goal>add-source</goal>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>test-compile-scala</id>
                        <phase>test-compile</phase>
                        <goals>
                            <goal>add-source</goal>
                            <goal>testCompile</goal>
                        </goals>
                    </execution>
                </executions>
                <!-- 填写你的scala version -->
                <configuration>
                    <scalaVersion>2.11.12</scalaVersion>
                </configuration>
            </plugin>

            <!-- maven编译插件,版本我是网上搞来的 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.2</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>


            <!-- assembly模式编译,带依赖-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.0.0</version>

                <configuration>
                    <appendAssemblyId>false</appendAssemblyId>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <manifest>
                        <!-- 你的mainclass入口,我就是test.scala 在scala文件夹下, 目录就是scr/main/scala -->
                            <mainClass>test</mainClass>
                        </manifest>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>

    </build>




</project>

 

有什么问题欢迎留言,第一次用scala maven打包的确遇到了很多问题,大家群策群力一起解决!

Logo

Kafka开源项目指南提供详尽教程,助开发者掌握其架构、配置和使用,实现高效数据流管理和实时处理。它高性能、可扩展,适合日志收集和实时数据处理,通过持久化保障数据安全,是企业大数据生态系统的核心。

更多推荐