2

Я использую spark 2.0.0 (локальный автономный) и spark-cassandra-connector 2.0.0-M1 с scala 2.11. Я работаю над проектом на IDE и каждый раз, когда я бегу искровые команды я получаюСвеча работает на Кассандре терпит неудачу из-за ClassNotFoundException: com.datastax.spark.connector.rdd.partitioner.CassandraPartition (подробности внутри)

ClassNotFoundException: com.datastax.spark.connector.rdd.partitioner.CassandraPartition 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:348) 
    at org.apache.spark.serializer.JavaDeserializationStream$$anon$1.resolveClass(JavaSerializer.scala:67) 
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1620) 
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1521) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1781) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353) 
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2018) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1942) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1808) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353) 
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:373) 
    at org.apache.spark.serializer.JavaDeserializationStream.readObject(JavaSerializer.scala:75) 
    at org.apache.spark.serializer.JavaSerializerInstance.deserialize(JavaSerializer.scala:114) 
    at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:253) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

Мой файл build.sbt

ibraryDependencies += "com.datastax.spark" %% "spark-cassandra-connector" % "2.0.0-M1" 

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

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

Так, по существу, это сообщение об ошибке

Caused by: org.apache.spark.SparkException: Job aborted due to stage failure: Task 1 in stage 0.0 failed 4 times, most recent failure: Lost task 1.3 in stage 0.0 (TID 13, 192.168.0.12): java.lang.ClassNotFoundException: com.datastax.spark.connector.rdd.partitioner.CassandraPartition 

дело в том, что если я запустил искровую оболочку с искровым кассандра-коннектором с

$ ./spark-shell --jars /home/Applications/spark-2.0.0-bin-hadoop2.7/spark-cassandra-connector-assembly-2.0.0-M1-22-gab4eda2.jar 

Я могу работать с искрами и кассандрой без сообщений об ошибках.

Любая подсказка о том, как устранить эту странную несовместимость?

Edit:

Это интересно, с точки зрения работника узла, когда я запускаю программу, разъем дает

`java.io.InvalidClassException: com.datastax.spark.connector.rdd.CassandraTableScanRDD; local class incompatible: stream classdesc serialVersionUID = 1517205208424539072, local class serialVersionUID = 6631934706192455668` 

это то, что в конечном итоге дает ClassNotFound (он не связывает, так как столкновения). Но проект только когда-либо использовал spark and connector 2.0 и scala 2.11, нет никакой несовместимости версии в любом месте.

ответ

2

В Spark только потому, что вы создаете против библиотеки, это не значит, что он будет включен в путь пути выполнения. Если вы добавили в

--jars /home/Applications/spark-2.0.0-bin-hadoop2.7/spark-cassandra-connector-assembly-2.0.0-M1-22-gab4eda2.jar 

К вашему искру подать для вашего приложения он будет включать в себя все эти необходимые библиотеки во время выполнения и на всех удаленных виртуальных машинах.

Итак, в основном вы видите, что в первом примере ни одна из библиотек соединителей не находится на пути класса runtime, в примере с искровой оболочкой.

+0

Большое спасибо за ваш ответ! Я понимаю, что вы имеете в виду, но я прикрепил настройки проекта (и сравнил их с существующим рабочим), и ничего не вышло из строя. Но разъем - это единственное, что не сработает (искра сама по себе работает отлично). Я использую IntelliJ. Я проверил структуру проекта ...-> Module-> Dependencies и обе банки присутствуют, хотя и с объемом компиляции. Но из IntelliJ doc область компиляции охватывает время выполнения. Есть ли у вас какие-либо намеки или подозрения относительно того, где может возникнуть проблема? – Mnemosyne

+0

Если вы не используете Мастер в локальном режиме, у вас возникнут проблемы, описанные выше. Несмотря на то, что путь класса приложения (Spark Driver) правильный, исполнителей не будет. Запуск мастера в локальном режиме означает, что все будет содержаться в одной и той же JVM. Это то, что большинство людей используют для тестирования. – RussS

+0

Мой мастер тоже местный. Я не общаюсь с внешним кластером. Я также добавил jar, который я построил в spark.executor.extraClassPath в файле spark-default.conf, и он по-прежнему не распознается во время выполнения. Spark shell + (тот же самый) jar-коннектор работает, но для меня это бесполезно. Я пытался воссоздать проект с нуля. Единственное, что я скопировал, это сам код. Такая же ошибка. Может ли это быть некоторой ошибкой между IntelliJ и новым коннектором? – Mnemosyne