Ошибка с spark-cassandra-connector в Spark java.lang.NoClassDefFoundError: com / datastax / driver / core / ProtocolOptions $ Compression

У меня возникает эта ошибка, когда я пытаюсь подключиться к кассандре с помощью spark-cassandra-connector:

Исключение в потоке «main» java.lang.NoClassDefFoundError: com / datastax / driver / core / ProtocolOptions $ Compression at com.datastax.spark.connector.cql.CassandraConnectorConf $. (CassandraConnectorConf.scala: 112) at com.datastax.spark .connector.cql.CassandraConnectorConf $. (CassandraConnectorConf.scala) в com.datastax.spark.connector.cql.CassandraConnector $ .apply (CassandraConnector.scala: 192) в com.datastax.spark.connector.SparkContextFunctions. $ 3 по умолчанию. (SparkContextFunctions.scala: 48) в main.scala.TestSpark $ .main (TestSpark.scala: 19) в main.scala.TestSpark.main (TestSpark.scala) в sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) в sun .reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:57) на sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) на java.lang.reflect.Method.java:43 spark.deploy.SparkSubmit $ .org $ apache $ s park $ deploy $ SparkSubmit $$ runMain (SparkSubmit.scala: 672) в org.apache.spark.deploy.SparkSubmit $ .doRunMain $ 1 (SparkSubmit.scala: 180) в org.apache.spark.deploy.SparkSubmit $ .submit ( SparkSubmit.scala: 205) в org.apache.spark.deploy.SparkSubmit $ .main (SparkSubmit.scala: 120) в org.apache.spark.deploy.SparkSubmit.main (SparkSubmit.scala) Вызвано: java.lang. ClassNotFoundException: com.datastax.driver.core.ProtocolOptions $ Сжатие в java.net.URLClassLoader $ 1.run (URLClassLoader.java:366) в java.net.URLClassLoader $ 1.run (URLClassLoader.java:355) в java.security. AccessController.doPrivileged (собственный метод) в java.net.URLClassLoader.findClass (URLClassLoader.java:354) в java.lang.ClassLoader.loadClass (ClassLoader.java:425) в sun.misc.Launcher $ AppClassLoaderun.loadClass ( java: 308) в java.lang.ClassLoader.loadClass (ClassLoader.java:358) ... еще 15 Я добавил банку в путь класса искры spark-cassandra- connector_2.11-1.5.0-M2.jar

Я добавил зависимости в файл sbt:

name := "Simple Project"

version := "1.0"

scalaVersion := "2.11.7"

libraryDependencies += "org.apache.spark" %% "spark-core" % "1.5.1"

libraryDependencies += "org.apache.spark" %% "spark-sql" % "1.5.1"

libraryDependencies += "com.datastax.spark" %% "spark-cassandra-connector" % "1.5.0-M2"

libraryDependencies += "com.datastax.spark" %% "spark-cassandra-connector-java" % "1.5.0-M2"

Это программа Scala, которую я пытаюсь выполнить:

package main.scala


import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
import com.datastax.spark.connector._

/**
 * Created by Simo on 01.12.15.
 */
object TestSpark {
  def main(args: Array[String]) {
   val conf = new SparkConf(true)
        .set("spark.cassandra.connection.host", "54.229.218.236")
        .setAppName("Simple Application")
    val sc= new SparkContext("local", "test", conf)
    val rdd = sc.cassandraTable("test", "kv")
    println(rdd.count)
    println(rdd.first)
    println(rdd.map(_.getInt("value")).sum)
  }
}

И вот как я его запускаю:

$ sbt package
$ $SPARK_HOME/bin/spark-submit --class "main.scala.TestSpark" target/scala-2.11/simple-project_2.11-1.0.jar

Вы можете помочь мне понять, что я делаю не так?

Спасибо!

Изменить:

Я попытался добавить драйвер Datastax в список зависимостей и в путь к классам Spark:

libraryDependencies += "com.datastax.cassandra" % "cassandra-driver-core" % "2.1.9"
libraryDependencies += "com.datastax.cassandra" % "cassandra-driver-mapping" % "2.1.9"

Последняя ошибка больше не появляется, но теперь у меня другая ошибка:

Изменить 2: сделать scala 2.10.6 во время компиляции (так же, как и scala-версия искры) Предыдущая ошибка больше не появляется, но у меня есть эта новая ошибка:

Наконец решено с помощью sbt-assembly, как это было предложено @Odomontois

Это финальный build.sbt:


person Simoyw    schedule 01.12.2015    source источник
comment
Да, я пробовал, но у меня другая ошибка (см. Вопрос об обновлении)   -  person Odomontois    schedule 01.12.2015
comment
@Odomontois спасибо работает с вашими решениями   -  person Beryllium    schedule 01.12.2015
comment
Чувак, большое спасибо. Есть ли причина, по которой возникают странные ошибки netty?   -  person Simoyw    schedule 02.12.2015
comment
Я добавил зависимости в список зависимостей в файле sbt и в путь к классу искры. Теперь последняя ошибка больше не появляется, но у меня другая ошибка. Не могли бы вы взглянуть на раздел редактирования вопроса. Спасибо за помощь!   -  person Simoyw    schedule 02.12.2015


Ответы (2)


Вам также необходимо добавить зависимость Datastax Cassandra Driver от (в соответствии с версией соединителя Spark-cassandra): - https://repo1.maven.org/maven2/com/datastax/cassandra/cassandra-driver-core/

Вы можете попробовать sbt-assembly, чтобы создать включающий все JAR или загрузить библиотеки данных из кэша ivy в путь к классам искры

name := "Simple Project"

version := "1.0"

scalaVersion := "2.10.6"

libraryDependencies += "org.apache.spark" %% "spark-core" % "1.5.1" % "provided"

libraryDependencies += "org.apache.spark" %% "spark-sql" % "1.5.1" % "provided"

libraryDependencies += "com.datastax.cassandra" % "cassandra-driver-core" % "2.1.9"

libraryDependencies += "com.datastax.spark" % "spark-cassandra-connector_2.10" % "1.5.0-M2"



jarName in assembly :="my-project-assembly.jar"

assemblyOption in assembly := (assemblyOption in             assembly).value.copy(includeScala = false)


resolvers += "Akka Repository" at "http://repo.akka.io/releases/"

mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) =>
    {
        case PathList("netty", "handler", xs @ _*)         => MergeStrategy.first
        case PathList("netty", "buffer", xs @ _*)     => MergeStrategy.first
        case PathList("netty", "common", xs @ _*)     => MergeStrategy.first
        case PathList("netty", "transport", xs @ _*)     => MergeStrategy.first
        case PathList("netty", "codec", xs @ _*)     => MergeStrategy.first

        case PathList("META-INF", "io.netty.versions.properties") => MergeStrategy.first
        case x => old(x)
        }
    }
person Simoyw    schedule 02.12.2015
comment
Похоже, что jar-файлы scala, используемые при компиляции и времени выполнения, не совпадают. Убедитесь, что вы используете Scala 2.10.x и удалили любые другие версии scala из пути к классам, - person Rdesmond; 15.07.2016

Вы пробовали добавить банку Spark-Cassandra в _1_? Что-то вроде _2_ с толстой банкой, имя которой, возможно, похоже на _3_?

person Sumit    schedule 02.12.2015
comment
Да, я изменил версию scala на 2.10.6, но у меня другая ошибка (см. Редактирование 2) - person Simoyw; 02.12.2015
comment
Спасибо вроде решился с помощью sbt-assembly plugin - person Sumit; 02.12.2015
comment
Исключение в потоке "main" java.lang.NoSuchMethodError: scala.runtime.ObjectRef.zero () Lscala / runtime / ObjectRef; в com.datastax.spark.connector.cql.CassandraConnector $ .com $ datastax $ spark $ connector $ cql $ CassandraConnector $$ createSession (CassandraConnector.scala) в com.datastax.spark.connector.cql.CassandraConnector $$ anonfun $ 2. apply (CassandraConnector.scala: 150) в com.datastax.spark.connector.cql.CassandraConnector $$ anonfun $ 2.apply (CassandraConnector.scala: 150) в com.datastax.spark.connector.cql.RefCountedCache.createNewValue (RefCountedCache.createNewValueAndKount scala: 31) в com.datastax.spark.connector.cql.RefCountedCache.acquire (RefCountedCache.scala: 56) в com.datastax.spark.connector.cql.CassandraConnector.openSession (CassandraConnector.scala: 81) в com.datastax .spark.connector.cql.CassandraConnector.withSessionDo (CassandraConnector.scala: 109) в com.datastax.spark.connector.cql.CassandraConnector.withClusterDo (CassandraConnector.scala: 120) в com.datastax.spark.connector.c $ .fromCassandra (Schema.scala: 241) в com.datastax.spark.connector.rdd.C assandraTableRowReaderProvider $ class.tableDef (CassandraTableRowReaderProvider.scala: 51) в com.datastax.spark.connector.rdd.CassandraTableScanRDD.tableDef $ lzycompute (CassandraTableScanRDD.scala: 59rdTableDatable.scala: 59rdTableDatable.scala: CassandraTableScanRDD.scala: 59) в com.datastax.spark.connector.rdd.CassandraTableRowReaderProvider $ class.verify (CassandraTableRowReaderProvider.scala: 146) в com.datastax.spark.connector.rdd.CassandraDraTableScand в com.datastax.spark.connector.rdd.CassandraTableScanRDD.getPartitions (CassandraTableScanRDD.scala: 143) в org.apache.spark.rdd.RDD $$ anonfun $ partitions $ 2.apply (RDD.scala: 239) at org.apache .spark.rdd.RDD $$ anonfun $ partitions $ 2.применить (RDD.scala: 237) в scala.Option.getOrElse (Option.scala: 120) в org.apache.spark.rdd.RDD.partitions (RDD.scala : 237) в org.apache.spark.SparkContext.runJob (SparkContext.scala: 1919) в org .apache.spark.rdd.RDD.count (RDD.scala: 1121) в main.scala.TestSpark $ .main (TestSpark.scala: 20) в main.scala.TestSpark.main (TestSpark.scala) в sun.reflect .NativeMethodAccessorImpl.invoke0 (собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:57) в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingImreflect.java.live: Method.invoke (Method.java:606) в org.apache.spark.deploy.SparkSubmit $ .org $ apache $ spark $ deploy $ SparkSubmit $$ runMain (SparkSubmit.scala: 672) в org.apache.spark.deploy. SparkSubmit $ .doRunMain $ 1 (SparkSubmit.scala: 180) в org.apache.spark.deploy.SparkSubmit $ .submit (SparkSubmit.scala: 205) в org.apache.spark.deploy.SparkSubmit $ .main (SparkSubmit.scala: 120) в org.apache.spark.deploy.SparkSubmit.main (SparkSubmit.scala) - person Simoyw; 02.12.2015
comment
Исключение в потоке «main» java.lang.NoClassDefFoundError: com / google / common / util / concurrent / AsyncFunction в com.datastax.spark.connector.cql.DefaultConnectionFactory $ .clusterBuilder (CassandraConnectionFactory.scalaast: 36) в com.datastax.spark.connector.cql.DefaultConnectionFactory $ .clusterBuilder (CassandraConnectionFactory.scala: 36) at com.datastax. spark.connector.cql.DefaultConnectionFactory $ .createCluster (CassandraConnectionFactory.scala: 85) в com.datastax.spark.connector.cql.CassandraConnector $ .com $ datastax $ spark $ connector $ cql $ CassandraConnector $$ createSession (CassandraConnector $$ createSession (Cassscandra) 155) в com.datastax.spark.connector.cql.CassandraConnector $$ anonfun $ 2.apply (CassandraConnector.scala: 150) в com.datastax.spark.connector.cql.CassandraConnector $$ anonfun $ 2.apply (CassandraConnector.scala: 150) в com.datastax.spark.connector.cql.RefCountedCache.createNewValueAndKeys (RefCountedCache.scala: 31) в com.datastax.spark.connector.cql.RefCountedCache.acquire (RefCountedCache.scala: 56) в com.datastax. .connector.cql.CassandraConnector.openSession (Кассандр aConnector.scala: 81) в com.datastax.spark.connector.cql.CassandraConnector.withSessionDo (CassandraConnector.scala: 109) в com.datastax.spark.connector.cql.CassandraConnector.withClusterDo (CassandraConnector) в com.datastax.scala: 120 .datastax.spark.connector.cql.Schema $ .fromCassandra (Schema.scala: 241) в com.datastax.spark.connector.rdd.CassandraTableRowReaderProvider $ class.tableDef (CassandraTableRowReaderProvider.scala: 51) в com.datast. connector.rdd.CassandraTableScanRDD.tableDef $ lzycompute (CassandraTableScanRDD.scala: 59) по адресу com.datastax.spark.connector.rdd.CassandraTableScanRDD.tableDef (CassandraTableScanRDD.tableDef (CassandraTableScanRDD.scala: 59rdspark.datastax.scala: 59rdspiderTableScanRDD.scala). class.verify (CassandraTableRowReaderProvider.scala: 150) в com.datastax.spark.connector.rdd.CassandraTableScanRDD.verify (CassandraTableScanRDD.scala: 59) в com.datastax.spark.connector.rdd.CassandraTableScala ala: 143) в org.apache.spark.rdd.RDD $$ anonfun $ partitions $ 2.apply (RDD.scala: 239) в org.apache.spark.rdd.RDD $$ anonfun $ partitions $ 2.apply (RDD. scala: 237) в scala.Option.getOrElse (Option.scala: 120) в org.apache.spark.rdd.RDD.partitions (RDD.scala: 237) в org.apache.spark.SparkContext.runJob (SparkContext.scala : 1919) на org.apache.spark.rdd.RDD.count (RDD.scala: 1121) на main.scala.TestSpark $ .main (TestSpark.scala: 20) на main.scala. TestSpark.main (TestSpark.scala) в sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:57) в sun.reflect.DelegatingMethoplatingMethopl.invoke (NativeMethodAccessorImpl.java:57) в sun.reflect.DelegatingMethoplhodiscount.Impl. в java.lang.reflect.Method.invoke (Method.java:606) в org.apache.spark.deploy.SparkSubmit $ .org $ apache $ spark $ deploy $ SparkSubmit $$ runMain (SparkSubmit.scala: 672) в org .apache.spark.deploy.SparkSubmit $ .doRunMain $ 1 (SparkSubmit.scala: 180) в org.apache.spark.deploy.SparkSubmit $ .submit (SparkSubmit.scala: 205) в org.apache.spark.deploy.SparkSubmit $ .main (SparkSubmit.scala: 120) в org.apache.spark.deploy.SparkSubmit.main (SparkSubmit.scala) Вызвано: java.lang.ClassNotFoundException: com.google.common.util.concurrent.AsyncFunction на java.net .URLClassLoader $ 1.run (URLClassLoader.java:366) в java.net.URLClassLoader $ 1.run (URLClassLoader.java:355) в java.security .AccessController.doPrivileged (собственный метод) на java.net.URLClassLoader.findClass (URLClassLoader.java:354) на java.lang.ClassLoader.loadClass (ClassLoader.java:425) на sun.misc.Launcher $ AppClassLoader.loadClass .java: 308) в java.lang.ClassLoader.loadClass (ClassLoader.java:358) ... Еще 34 - person Simoyw; 02.12.2015