2016-02-25 3 views
0

Я пытаюсь запустить небольшое приложение, которое читает только таблицу из базы данных cassandra.проблема зависимости cassandra: не найден CassandraJavaUtil

Запущенный приложение с искровым submmit:

  • /opt/spark/bin/spark-submit --class com.baitic.mcava.pruebacassandra.PruebaCassandraBBDD --master spark://192.168.1.105:7077 --executor-memory 1G /home/miren/NetBeansProjects/PruebaCassandra/target/original-PruebaCassandra-1.0-SNAPSHOT.jar --deploy-mode cluster

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

16/02/25 11:18:34 INFO SparkDeploySchedulerBackend: SchedulerBackend is ready for scheduling beginning after reached minRegisteredResourcesRatio: 0.0 Exception in thread "main" java.lang.NoClassDefFoundError: com/datastax/spark/connector/japi/CassandraJavaUtil at com.baitic.mcava.pruebacassandra.PruebaCassandraBBDD.main(PruebaCassandraBBDD.java:71) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:731) at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:181) at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:206) at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:121) at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala) Caused by: java.lang.ClassNotFoundException: com.datastax.spark.connector.japi.CassandraJavaUtil at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 10 more

создать Maven Java приложение, то я поставил pom.xml с необходимыми зависимостями:

org.apache.spark spark-core_2.10 1.6.0

<dependency> 
<groupId>com.datastax.spark</groupId> 
<artifactId>spark-cassandra-connector_2.10</artifactId> 
<version>1.6.0-M1</version> 
    </dependency> 


    <dependency> 
<groupId>com.datastax.cassandra</groupId> 
<artifactId>cassandra-driver-core</artifactId> 
<version>3.0.0</version> 
    </dependency> 

    <dependency> 
<groupId>com.datastax.spark</groupId> 
<artifactId>spark-cassandra-connector-java_2.10</artifactId> 
<version>1.5.0</version> 
    </dependency> 
</dependencies> 

импорт:

  • импорт org.apache.spark.api.java.JavaSparkContext;
  • import org.apache.commons.lang.StringUtils;
  • импорт com.datastax.spark.connector.japi.CassandraRow;
  • import org.apache.spark.SparkConf;
  • импорт org.apache.spark.api.java.JavaRDD;
  • importorg.apache.spark.api.java.function.Function;
  • импорт статический com.datastax.spark.connector.japi.CassandraJavaUtil.javaFunctions;

....

код основной:

JavaRDD cassandraRowsRDD = javaFunctions(sc).cassandraTable("ks", "sensor_readings") .map(new Function(){ @Override public String call(CassandraRow cassandraRow) throws Exception{ return cassandraRow.toString(); } });

System.out.println("Data as CassandraRows \n"+ StringUtils.join(cassandraRowsRDD.toArray(),"\n")); 
+0

Я решаю проблему ... я компилирую банку cassandra и не добавляю через maven. Я использую sbt, и я получаю файл jar и добавляю путь в spark-default.sh. Но приложение все еще не работает. У меня проблема с сериализуемым, когда я вызываю методу collet() – Miren

+0

Я решаю всю проблему, когда приложение работает отлично ..... – Miren

ответ

2

Убедитесь, что следующие в ваших операторов импорта:

import static com.datastax.spark.connector.japi.CassandraJavaUtil.*; 

Если вы работаете этот код с любым пользовательских классов путь к файлу jar должен быть добавлен в файл spark-defaults.conf с параметром:

spark.driver.extraClassPath  /whateverpath/to/file/ 
+0

да, у меня есть весь импорт, и я не использую никаких пользовательский класс. Я не понимаю, почему у меня такая ошибка. – Miren

+0

Изменить эту строку: 'import static com.datastax.spark.connector.japi.CassandraJavaUtil.javaFunctions;' to 'import static com.datastax.spark.connector.japi.CassandraJavaUtil. *;' – mithrix

+0

Я сделал это, но у меня есть такая же ошибка. Я очень смущен этим – Miren

0

Попробуйте использовать параметр -jars в команде spark submit. скачайте cassandra jar и укажите имя бара cassandra в опции -jars или укажите его как extraClassPath в файле spark env.

+0

Я добавляю в spark-default.sh два варианта spark spark.driver.extraClassPath PATHOFTHECASSANDRAJAVAJAR и spark.executor.extraClassPath PATHOFTHECASSANDRAJAVAJAR, но у меня такая же ошибка. Я также добавляю в код приложения тот же путь в setJars(). Я не могу найти в env.sh переменную extra_pathclass – Miren

+0

Можете ли вы попробовать использовать опцию --jars «path to cassandra jar» в команде spark-submit и сообщить мне, если она работает.Попробуйте что-то вроде этого spark-submit --master yarn-client --executor-memory 4g --num-executors 4 --driver-memory 5g --jars /home/rgulati/spark_jars/commons-csv-1.2.jar,/ home/rgulati/spark_jars/spark-csv_2.10-1.0.0.jar –

+0

Я думаю, что лучше добавить путь к банкам в искровом контексте. Я сделал это и отлично работал. Также вы можете поместить этот путь в spark-default.sh (spark.driver.extraclassPath spark.executor.extraClassPath). В моем развертывании я пишу путь jar в spark-default.sh и добавляю путь к моей банке в искровом conf в java-коде, и это отлично работает. Извините за мой английский .... – Miren

Смежные вопросы