2017-09-12 3 views
0

J'utilise Apache Spark 2.1.0 et Cassandra 3.0.14. Dans mon code, je veux créer un lien entre Spark et Cassandra:NullpointerException lors de la création de session entre Apache Spark et Cassandra

  ... 
SparkSession sparkSession = SparkSession.builder() 
    .appName(appName) 
    .config("spark.cassandra.connection.host", "localhost")        
    .config("spark.cassandra.connection.port", 9042) 
    .getOrCreate(); 

CassandraConnector cassandraConnector = CassandraConnector 
    .apply(sparkSession.sparkContext().getConf()); 
Session session = cassandraConnector.openSession(); 
ResultSet rs = session.execute("select * from myDB.myTable"); 
      ... 

Quand je lance le code localement tout éclipse fonctionne très bien, mais quand je lance le pot-fichier sur mon serveur étincelle locale je reçois

Exception in thread "main" java.lang.NullPointerException 

La méthode qui provoque cette erreur est

cassandraConnector.openSession(); 

Ceci est mon pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>xign_analysis</groupId> 
    <artifactId>xign_analysis_jar_archive</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <properties> 
     <maven.compiler.target>1.8</maven.compiler.target> 
     <maven.compiler.source>1.8</maven.compiler.source> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 
    <build> 
    </build> 
    <dependencies> 
     <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-core_2.10 --> 
     <dependency> 
      <groupId>org.apache.spark</groupId> 
      <artifactId>spark-core_2.10</artifactId> 
      <version>2.1.1</version> 
      <scope>compile</scope> 
     </dependency> 

     <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-sql_2.10 --> 
     <dependency> 
      <groupId>org.apache.spark</groupId> 
      <artifactId>spark-sql_2.10</artifactId> 
      <version>2.1.1</version> 
     </dependency> 

     <dependency> 
      <groupId>org.apache.spark</groupId> 
      <artifactId>spark-mllib_2.10</artifactId> 
      <version>2.1.1</version> 
      <scope>compile</scope> 
     </dependency> 

     <!-- https://mvnrepository.com/artifact/org.apache.cassandra/cassandra-all --> 
     <dependency> 
      <groupId>org.apache.cassandra</groupId> 
      <artifactId>cassandra-all</artifactId> 
      <version>3.11.0</version> 
      <exclusions> 
       <exclusion> 
        <groupId>org.slf4j</groupId> 
        <artifactId>log4j-over-slf4j</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 

     <!-- https://mvnrepository.com/artifact/com.datastax.spark/spark-cassandra-connector_2.10 --> 
     <dependency> 
      <groupId>com.datastax.spark</groupId> 
      <artifactId>spark-cassandra-connector_2.10</artifactId> 
      <version>2.0.5</version> 
     </dependency> 

     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.12</version> 
     </dependency> 
    </dependencies> 
</project> 

Im en utilisant Macbook avec El Capitan (10.11.06). Mon Spark Master, Spark Worker et le serveur Cassandra fonctionnent correctement. Je n'ai aucune idée de comment résoudre ce problème.

+0

Il semble que je n'ai pas de connexion car Cassandra fonctionne sur localhost: 9042. Ainsi, la méthode 'cassandraConnector.openSession()' renvoie ** null **. Y at-il une autre façon de configurer l'hôte et le port de Cassandra? –

Répondre

0

J'ai trouvé la solution. Dans le étincelle/pots dir il existe une ancienne version de Guava: Google Core bibliothèques pour Java. J'ai remplacé cette ancienne version (v. 14.0.1) par la plus récente (v. 23.0) et tout fonctionne bien.