Spark 1.5.1 Создание RDD из Cassandra (ClassNotFoundException: com.datastax.spark.connector.japi.rdd.CassandraTableScanJavaRDD)

Я пытаюсь получить записи из кассандры и создать rdd.

JavaRDD<Encounters> rdd = javaFunctions(ctx).cassandraTable("kesyspace1", "employee", mapRowTo(Employee.class)); 

Я получаю эту ошибку при отправке задания в Spark 1.5.1

Exception in thread "main" java.lang.NoClassDefFoundError: com/datastax/spark/connector/japi/rdd/CassandraTableScanJavaRDD
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:274)
at org.apache.spark.util.Utils$.classForName(Utils.scala:173)
at org.apache.spark.deploy.worker.DriverWrapper$.main(DriverWrapper.scala:56)
at org.apache.spark.deploy.worker.DriverWrapper.main(DriverWrapper.scala)
Caused by: java.lang.ClassNotFoundException: com.datastax.spark.connector.japi.rdd.CassandraTableScanJavaRDD
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)

Текущие зависимости:

   <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-core_2.11</artifactId>
      <version>1.5.1</version>
  </dependency>
  <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-sql_2.11</artifactId>
      <version>1.5.1</version>
  </dependency>
  <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-client</artifactId>
      <version>2.7.1</version>
  </dependency>
  <dependency>
      <groupId>com.datastax.spark</groupId>
      <artifactId>spark-cassandra-connector-java_2.11</artifactId>
      <version>1.5.0-M2</version>
  </dependency>
 <dependency>
    <groupId>com.datastax.cassandra</groupId>
    <artifactId>cassandra-driver-core</artifactId>
    <version>3.0.0-alpha4</version>
 </dependency>

Код Java:

import com.tempTable.Encounters;
import org.apache.spark.SparkContext;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.SparkConf;
import static com.datastax.spark.connector.japi.CassandraJavaUtil.javaFunctions;
import static com.datastax.spark.connector.japi.CassandraJavaUtil.mapRowTo; 

 Long now = new Date().getTime();
 SparkConf conf = new SparkConf(true)
    .setAppName("SparkSQLJob_" + now)
     set("spark.cassandra.connection.host", "192.168.1.75")
     set("spark.cassandra.connection.port", "9042");

 SparkContext ctx = new SparkContext(conf);
 JavaRDD<Encounters> rdd = javaFunctions(ctx).cassandraTable("keyspace1", "employee", mapRowTo(Employee.class));
 System.out.println("rdd count = "+rdd.count());

Есть ли проблема с версией в зависимостях?
Пожалуйста, помогите устранить эту ошибку. Заранее спасибо.


person Ashish Gadkari    schedule 30.10.2015    source источник
comment
Вы использовали пакет или сборку mvn?   -  person eliasah    schedule 04.11.2015


Ответы (2)


вам нужно добавить файл jar с SparkConf

.setJars(Seq(System.getProperty("user.dir") + "/target/scala-2.10/sparktest.jar"))

Для получения дополнительной информации см. http://www.datastax.com/dev/blog/common-spark-troubleshooting

person karmadip dodiya    schedule 04.11.2015

Простой ответ: "

вам нужны все зависимости, связанные внутри jar-файла

or

компьютер-исполнитель должен содержать все ваши зависимые файлы jar в своем пути к классам

Решение для создания fatJar с помощью gradle:

buildscript {
    dependencies {
        classpath 'com.github.jengelman.gradle.plugins:shadow:1.2.2'
    }
    repositories {
        jcenter()
    }
}

apply plugin: 'com.github.johnrengelman.shadow'

Затем вызовите "gradle shadowJar", чтобы создать файл jar. После этого отправьте свою работу, это должно решить вашу проблему.

person happysathya    schedule 07.12.2015