Spark Twitter Streaming异常:(org.apache.spark.Logging)classnotfound

时间:2016-08-11 10:22:41

标签: maven twitter apache-spark

我正在使用Maven尝试使用Scala的Spark Twitter Streaming示例,但是当我运行它时,我遇到了以下错误:

  

引起:java.lang.ClassNotFoundException:org.apache.spark.Logging

以下是我的依赖项:

<dependencies>
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-core_2.10</artifactId>
    <version>2.0.0</version>
</dependency>
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-streaming_2.10</artifactId>
    <version>2.0.0</version>
</dependency> 
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-streaming-twitter_2.11</artifactId>
    <version>1.6.2</version> 
</dependency> 

我知道Logging已移至org.apache.spark.internal.Logging,但我不知道是否是原因,我已经尝试将依赖项的版本更改为最新版本,但是没有运气。

5 个答案:

答案 0 :(得分:16)

TLDR;

org.apache.spark.Logging在Spark版本1.5.2或更低版本中可用(虽然我没有在所有较低版本上测试)但在高于相同版本的版本中不可用。

<小时/> 这一切都归结为使用不兼容版本的Apache Spark

1。我们试着在Spark 2.0.0import org.apache.spark.Logging

user@ubuntu:~$ /opt/spark/bin/spark-shell
Welcome to
  ____              __
 / __/__  ___ _____/ /__
_\ \/ _ \/ _ `/ __/  '_/
/___/ .__/\_,_/_/ /_/\_\   version 2.0.0
   /_/      
Using Scala version 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_101)
scala> import org.apache.spark.Logging
<console>:23: error: object Logging is not a member of package org.apache.spark
import org.apache.spark.Logging
          ^

找不到类org.apache.spark.Logging

2。我们试着在Spark 1.6.2import org.apache.spark.Logging

(与上述相同,即类org.apache.spark.Logging 找到。)


3。我们试着在Spark 1.5.2import org.apache.spark.Logging

user@ubuntu:~$ /opt/spark-1.5.2-bin-hadoop2.6/bin/spark-shell
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 1.5.2
      /_/
Using Scala version 2.10.4 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_101)
scala> import org.apache.spark.Logging
import org.apache.spark.Logging

YES!它可用并成功导入

您可以看到Spark-Streaming-Twitter所需的org.apache.spark.Logging在Spark版本1.5.2或更低版本中可用,因此我建议您使用1.5.2或较低版本的火花。

因此,您应该用以下内容替换您的maven依赖项: (假设您使用Scala 2.11.x

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-core_2.11</artifactId>
    <version>1.5.2</version>
</dependency>

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

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-streaming-twitter_2.11</artifactId>
    <version>1.6.2</version>
</dependency>

请注意,artifactId2.11引用scala版本,version1.5.21.6.2引用库(spark {核心或spark-streaming-twitter)版本。

答案 1 :(得分:10)

好消息! another dependency解决了这个问题,与Spark 2.x兼容。

对于SBT,请使用此依赖关系:

"org.apache.bahir" %% "spark-streaming-twitter" % "2.0.0"

答案 2 :(得分:2)

如果不更改版本,我们可以解决问题。

https://raw.githubusercontent.com/swordsmanliu/SparkStreamingHbase/master/lib/spark-core_2.11-1.5.2.logging.jar下载spark-core_2.11-1.5.2.logging.jar并将其粘贴到spark \ jars文件夹中。在spark-submit命令中包含此jar路径。它解决了我的问题。

答案 3 :(得分:0)

正如@ypriverol建议的那样,将依赖关系更改为org.apache.bahirApache Bahir提供了许多Apache分析平台的扩展,包括Spark。

<dependency>
    <groupId>org.apache.bahir</groupId>
    <artifactId>spark-streaming-twitter_2.11</artifactId>
    <version>2.2.0</version>
</dependency>

答案 4 :(得分:0)

尝试添加https://mvnrepository.com/artifact/commons-logging/commons-logging作为依赖项,然后再次构建jar。.