我的Spark Streaming程序收到以下错误: 线程“主”中的异常java.lang.NoClassDefFoundError:org / apache / spark / internal / Logging 我的spark版本是2.1,与集群中运行的版本相同。
我在Internet上找到的信息提示我,旧版本的org.apache.spark.Logging变成org.apache.spark.internal.Login新版本,这阻止了jar包的发现。但是我pom中引入的依赖项是一个新版本。为什么找不到jar包?
<properties>
<spark.version>2.1.0</spark.version>
<scala.version>2.11</scala.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_${scala.version}</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming_${scala.version}</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_${scala.version}</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-hive_${scala.version}</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming-kafka-0-10_2.11</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>org.scala-tools</groupId>
<artifactId>maven-scala-plugin</artifactId>
<version>2.15.2</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.scala-tools</groupId>
<artifactId>maven-scala-plugin</artifactId>
<version>2.15.2</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
答案 0 :(得分:1)
我多次遇到java.lang.NoClassDefFoundError。我安装了Spark-2.3.1,因此我认为它也应适用于您的情况。
在我的情况下,java.lang.NoClassDefFoundError:org / apache / spark / internal / Logging应该来自spark-core_2.11-2.3.1.jar,在您的情况下,它应该来自spark-core_2。根据问题中提到的Spark和Scala版本11-2.1.0.jar
当您查看source code时,它正在使用org.slf4j._类。因此,我的建议是在您的Pom中添加this dependency,然后尝试。 对于NoClassDefFoundError,总是最好找到产生此错误的jar,然后尝试回溯它。
下面是假定所有依赖项jar都放在〜/ spark / jars位置的情况下,找出导致NoClassDefFound错误的jar的方法。
for i in `ls ~/spark/jars/*.jar`;
do
jar tvf $i | grep org/apache/spark/internal/Logging;
echo "************** $i ************** ";
done
请告诉我这是否解决了您的问题。