Ошибка оболочки Spark 2.0 Cassandra Scala: NoClassDefFoundError

Я настроил оболочку spark 2.0 для работы с соединителем datastax cassandra.

spark-shell --packages datastax:spark-cassandra-connector:1.5.1-s_2.11

При запуске этого фрагмента в оболочке

sc.stop
import org.apache.spark
import org.apache.spark._
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
import com.datastax.spark
import com.datastax.spark._
import com.datastax.spark.connector
import com.datastax.spark.connector._
import com.datastax.spark.connector.cql
import com.datastax.spark.connector.cql._
import com.datastax.spark.connector.cql.CassandraConnector
import com.datastax.spark.connector.cql.CassandraConnector._

val conf = new SparkConf(true).set("spark.cassandra.connection.host", "dbserver")
val sc = new SparkContext("spark://localhost:7077", "test", conf)
val table = sc.cassandraTable("keyspace", "users")
println(table.count)
println(table.first)

На этой линии

scala> val table = sc.cassandraTable("keyspace", "users")

Получение этой ошибки

java.lang.NoClassDefFoundError: com/datastax/spark/connector/cql/CassandraConnector$
at com.datastax.spark.connector.SparkContextFunctions.cassandraTable$default$3(SparkContextFunctions.scala:48)
... 62 elided

person user896993    schedule 17.08.2016    source источник
comment
Я думаю, что проблема с вашим подходом заключается в том, что коннектор cassandra не может найти некоторые классы в пути к классам. Вы можете создать толстую банку (например, запустить сборку sbt с соединителем cassandra), а затем использовать эту локальную банку в оболочке Spark.   -  person codejitsu    schedule 17.08.2016


Ответы (3)


Как я уже сказал, один из вариантов — создать толстый jar со всеми зависимостями коннектора cassandra внутри него. Вы можете сделать это следующим образом:

$ git clone https://github.com/datastax/spark-cassandra-connector.git
$ cd spark-cassandra-connector
$ sbt assembly

А затем просто вставьте локальный jar через параметр командной строки в оболочку spark.

person codejitsu    schedule 17.08.2016

Возможно, вам нужно добавить немного больше зависимостей или увеличить его версии. В моем проекте java я использовал это:

com.datastax.spark:spark-cassandra-connector_2.10:1.3.0-M2
com.datastax.spark:spark-cassandra-connector-java_2.10:1.3.0-M2
org.apache.spark:spark-core_2.10:1.3.0
org.apache.spark:spark-streaming_2.10:1.3.0

Попробуйте и дайте мне знать.

person Damiano    schedule 17.08.2016

Версия соединителя 1.5 несовместима со Spark 2.0. Проверьте текущую основную ветку или тег для 2.0.0-m1. Толстая банка, созданная сборкой SBT на этой ветке, должна работать. Вскоре у нас должны быть официальные пакеты искр и координаты maven для этого ресурса.

person RussS    schedule 17.08.2016