2017-08-03 4 views
0

Beim Versuch, einige Daten in eine Cassandra-Tabelle einzufügen, erhalte ich den folgenden Fehler von Spark.com.google.common.util.concurrent.ExecutionError: java.lang.NoClassDefFoundError: Die Klasse konnte nicht initialisiert werden com.datastax.driver.core.Cluster

com.google.common.util.concurrent.ExecutionError: java.lang.NoClassDefFoundError: Could not initialize class com.datastax.driver.core.Cluster 
     at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2261) 
     at com.google.common.cache.LocalCache.get(LocalCache.java:4000) 
     at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:4004) 
     at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4874) 
     at com.github.adejanovski.cassandra.jdbc.CassandraDriver.connect(CassandraDriver.java:102) 
     at org.apache.spark.sql.execution.datasources.jdbc.DriverWrapper.connect(DriverWrapper.scala:45) 
     at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$createConnectionFactory$1.apply(JdbcUtils.scala:59) 
     at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$createConnectionFactory$1.apply(JdbcUtils.scala:50) 
     at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$.savePartition(JdbcUtils.scala:538) 
     at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$saveTable$1.apply(JdbcUtils.scala:670) 
     at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$saveTable$1.apply(JdbcUtils.scala:670) 
     at org.apache.spark.rdd.RDD$$anonfun$foreachPartition$1$$anonfun$apply$29.apply(RDD.scala:925) 
     at org.apache.spark.rdd.RDD$$anonfun$foreachPartition$1$$anonfun$apply$29.apply(RDD.scala:925) 
     at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:1944) 
     at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:1944) 
     at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:87) 
     at org.apache.spark.scheduler.Task.run(Task.scala:99) 
     at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:282) 
     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) 
Caused by: java.lang.NoClassDefFoundError: Could not initialize class com.datastax.driver.core.Cluster 
     at com.github.adejanovski.cassandra.jdbc.SessionHolder.createSession(SessionHolder.java:137) 
     at com.github.adejanovski.cassandra.jdbc.SessionHolder.<init>(SessionHolder.java:83) 
     at com.github.adejanovski.cassandra.jdbc.CassandraDriver$1.load(CassandraDriver.java:68) 
     at com.github.adejanovski.cassandra.jdbc.CassandraDriver$1.load(CassandraDriver.java:65) 
     at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3599) 
     at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2379) 
     at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2342) 
     at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2257) 
     ... 20 more 

Ich bin den Code erstmals succesully ausführen kann, aber wenn ich den gleichen Code erneut ausführen, ich bin die oben genannten Fehler.

+0

Zeigen Sie uns ein [MCVE] des Codes bitte – Dijkgraaf

Antwort

0

Standardmäßig enthalten gepackte Anwendungen nur Ihre Klassen, nicht die Bibliotheken, mit denen Sie kompiliert haben. Daher haben die Spark-Treiber keine der Bibliotheken, die Sie verwendet haben, z. B. den Cassandra-Connector.

Sie müssen ein Uber-JAR erstellen, das all Ihre abhängigen Bibliotheken enthält, wenn Sie Spark-Submit verwenden möchten. Die Verwendung von Maven oder SBT kann Ihnen dabei helfen.

Für Maven: https://databricks.gitbooks.io/databricks-spark-knowledge-base/content/troubleshooting/missing_dependencies_in_jar_files.html

Verwandte Themen