cassandra依赖项问题:找不到CassandraJavaUtil

时间:2016-02-25 10:22:14

标签: apache-spark

我尝试启动一个只从cassandra数据库中读取表的app。

使用spark-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已准备好在达到minRegisteredResourcesRatio后开始进行调度:0.0   线程“main”中的异常java.lang.NoClassDefFoundError:com / datastax / spark / connector / japi / CassandraJavaUtil       在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)       在org.apache.spark.deploy.SparkSubmit $ .org $ apache $ spark $ deploy $ SparkSubmit $$ runMain(SparkSubmit.scala:731)       在org.apache.spark.deploy.SparkSubmit $ .doRunMain $ 1(SparkSubmit.scala:181)       在org.apache.spark.deploy.SparkSubmit $ .submit(SparkSubmit.scala:206)       在org.apache.spark.deploy.SparkSubmit $ .main(SparkSubmit.scala:121)       在org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)   引起: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个

我创建了一个maven java应用程序,然后我将pom.xml与必要的依赖项放在一起:

  

                         org.apache.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>

进口:

  • import org.apache.spark.api.java.JavaSparkContext;
  • import org.apache.commons.lang.StringUtils;
  • import com.datastax.spark.connector.japi.CassandraRow;
  • import org.apache.spark.SparkConf;
  • import org.apache.spark.api.java.JavaRDD;
  • importorg.apache.spark.api.java.function.Function;
  • import static com.datastax.spark.connector.japi.CassandraJavaUtil.javaFunctions;

...

代码主:

  

JavaRDD cassandraRowsRDD =   javaFunctions(sc).cassandraTable(“ks”,“sensor_readings”)               .map(new Function(){                   @覆盖                   public String call(CassandraRow cassandraRow)抛出Exception {                       return cassandraRow.toString();                   }               });

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

2 个答案:

答案 0 :(得分:2)

确保导入语句中包含以下内容:

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

如果您使用任何自定义类运行此代码,则需要使用以下参数将jar文件路径添加到spark-defaults.conf文件中:

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

答案 1 :(得分:0)

尝试在spark submit命令中使用--jars选项。下载cassandra jar并在--jars选项中指定cassandra jar的名称,或在spark env文件中将其指定为extraClassPath。