Apache Spark 1.5 с Cassandra: исключение приведения класса

Я использую следующие программы:

  1. Кассандра 2.1.9
  2. Искра 1.5
  3. Java с использованием драйвера Cassandra, предоставленного Datastax.
  4. Ubuntu 12.0.4

Когда я запускаю Spark локально, используя local[8], программа работает нормально, и данные сохраняются в Cassandra. Однако, когда я отправляю задание в искровой кластер, возникает следующее исключение:

16 Sep 2015 03:08:58,808  WARN [task-result-getter-0] (Logging.scala:71) TaskSetManager - Lost task 3.0 in stage 0.0 (TID 3,
192.168.50.131): java.lang.ClassCastException: cannot assign instance of scala.collection.immutable.HashMap$SerializationProxy to field scala.collection.Map$WithDefault.underlying of type scala.collection.Map in instance of scala.collection.immutable.Map$WithDefault
        at java.io.ObjectStreamClass$FieldReflector.setObjFieldValues(ObjectStreamClass.java:2083)
        at java.io.ObjectStreamClass.setObjFieldValues(ObjectStreamClass.java:1261)
        at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1996)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
        at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1990)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
        at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1990)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
        at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1990)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
        at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1990)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
        at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1990)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
        at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1990)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
        at org.apache.spark.serializer.JavaDeserializationStream.readObject(JavaSerializer.scala:72)
        at org.apache.spark.serializer.JavaSerializerInstance.deserialize(JavaSerializer.scala:98)
        at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:61)
        at org.apache.spark.scheduler.Task.run(Task.scala:88)
        at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:214)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:745)

Я не знаю, как исправить эту ошибку. Я использую только следующие 2 зависимости:

  1. spark-assembly-1.5.0-hadoop2.6.0.jar -> Поставляется с загрузкой Spark
  2. spark-cassandra-connector-java-assembly-1.5.0-M1-SNAPSHOT.jar -> Создайте из Git с помощью sbt.

Я также экспортировал свою упакованную банку приложения в путь к классам Spark. Пожалуйста, помогите, так как я не уверен, является ли это ошибкой конкретного приложения или проблемой самого распределения Spark.


person Dunxton    schedule 16.09.2015    source источник


Ответы (1)


Я наконец выяснил проблему.

Проблема заключалась в том, что я только добавлял свою упакованную банку приложения (толстую банку) в контекст искры и исключал следующие две банки:

1. искра-сборка-1.5.0-hadoop2.6.0.jar

2. spark-cassandra-connector-java-assembly-1.5.0-M1-SNAPSHOT.jar.

Оказывается, я должен также добавить spark-cassandra-connector-java-assembly-1.5.0-M1-SNAPSHOT.jar в контекст искры и исключить только spark-assembly-1.5 .0-hadoop2.6.0.jar.

person Dunxton    schedule 18.09.2015
comment
У меня та же проблема, что и у вас, но я не могу понять ваше решение. Я определяю sparkconf следующим образом: SparkConf sparkConf = new SparkConf (). SetAppName (new String (Новое приложение)); sparkConf.setMaster (spark: // xxx: 7077); sparkConf.setAppName (API-интерфейс Streambase Backend); sparkConf.set (spark.cassandra.connection.host, 127.0.0.1); JavaSparkContext sparkContext = новый JavaSparkContext (sparkConf); Что-то вроде этого добавить? String [] jars = {/opt/spark-1.6.1-bin-hadoop2.6/spark-assembly-1.6.1-hadoop2.6.0.jar}; sparkConf.setJars (банки); - person phcaze; 16.06.2016