私はscala 2.11
でspark 2.0.0
(ローカルスタンドアロン)とspark-cassandra-connector 2.0.0-M1
を使用しています。私は、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-cassandra-connectorでスパークシェルを動かすのは、
$ ./spark-shell --jars /home/Applications/spark-2.0.0-bin-hadoop2.7/spark-cassandra-connector-assembly-2.0.0-M1-22-gab4eda2.jar
私は途中でエラーメッセージなしでsparkとcassandraを扱うことができます。
この奇妙な非互換性をトラブルシューティングする方法についての手掛かりはありますか?
編集:
これは興味深いです、ワーカーノードの観点から、私はプログラムを実行すると、コネクターは、最終的にClassNotFoundは(それが原因で結合しない与えるものだ
`java.io.InvalidClassException: com.datastax.spark.connector.rdd.CassandraTableScanRDD; local class incompatible: stream classdesc serialVersionUID = 1517205208424539072, local class serialVersionUID = 6631934706192455668`
を与えますの衝突)。しかし、このプロジェクトではspark and connector 2.0
とscala 2.11
しか使われていませんでした。
ご回答いただきありがとうございます。私はあなたが何を意味しているのか理解していますが、私はプロジェクトの設定を梳きました(そしてそれらを既存のものと比較しました)。しかし、コネクタだけでは動作しません(スパークだけでうまく動作します)。私はIntelliJを使用しています。私はProject Structure ...-> Module-> Dependenciesをチェックしましたが、両方のjarファイルはコンパイルの対象となっていますが、存在します。しかし、IntelliJのドキュメントから、コンパイルスコープもランタイムをカバーします。問題がどこにあるのかについて何かヒントを感じているのですか? – Mnemosyne
マスターをローカルモードで実行していない限り、上で概説した問題が発生します。アプリケーション(Spark Driver)のクラスパスは正しいものの、エグゼキュータは正しくありません。ローカルモードでマスターを実行すると、すべてが同じJVM内に含まれることになります。これは、ほとんどの人がテストに使用するものです。 – RussS
私のマスターもローカルです。私は外部クラスタと通信していません。 spark-default.confファイルのspark.executor.extraClassPathで構築したjarファイルも追加しましたが、実行時には認識されません。 Spark shell +(同じ)jarコネクタが動作しますが、それは私のシステムにとっては役に立たないものです。私は最初からプロジェクトを作り直そうとしました。コピーしたのはコードそのものだけでした。同じエラー。これはIntelliJと新しいコネクタの間にいくつかのバグでしょうか? – Mnemosyne