Подтвердить что ты не робот

Исправлено исключение Stream Streaming (org.apache.spark.Logging) classnotfound

Я пытаюсь использовать Spark Twitter Streaming с помощью Scala с помощью Maven, но при запуске я становлюсь ниже ошибки:

Вызвано: 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, но я не знаю, является ли это причиной, я уже пытался изменить версию зависимостей на последнюю, но не повезло.

4b9b3361

Ответ 1

TL;DR;

Класс org.apache.spark.Logging доступен в версии Spark 1.5.2 или ниже (хотя я не тестировал все более низкие версии), но недоступен в версиях выше чем то же самое.


Все сводится к использованию несовместимой версии Apache Spark:

1. Попробуйте import org.apache.spark.Logging на Spark 2.0.0:

[email protected]:~$ /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. Попробуйте import org.apache.spark.Logging на Spark 1.6.2:

(то же, что и выше, например, класс org.apache.spark.Logging находится не.)


3. Попробуйте import org.apache.spark.Logging на Spark 1.5.2:

[email protected]:~$ /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

ДА! Он доступен и успешно импортирован

Как видите, org.apache.spark.Logging, который требуется Spark-Streaming-Twitter, доступен в версии 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>

Обратите внимание, что artifactId: 2.11 относится к версии scala и version: 1.5.2 или 1.6.2 относится к версии библиотеки (искровой или искровой поток-твиттер).

Ответ 2

Хорошие новости! Существует другая зависимость, которая решает эту проблему и совместима с Spark 2.x.

Для SBT используйте эту зависимость:

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

Ответ 3

Я встретил это исключение, используя spark-streaming-kafka_2.11-1.6.3.jar, и решил его, используя spark-streaming-kafka-0-8_2.11-2.1.0.jar вместо