Datastax Cassandra Pilote jeter CodecNotFoundException
L'Exception exacte est comme suit
com.datastax.le pilote.de base.des exceptions.CodecNotFoundException: Codec pas trouvé pour l'opération demandée: [varchar <-> java.les mathématiques.BigDecimal]
Ce sont des versions de Logiciel, je suis en utilisant
Étincelle de 1,5
Datastax-cassandra 3.2.1
CDH 5.5.1
Le code, je suis en train d'exécuter est une Étincelle du programme à l'aide de l'api java et il lit des données (csv) de hdfs et la charge dans cassandra tables . Je suis l'aide de la spark-cassandra-connecteur. J'ai eu beaucoup de questions concernant le google s goyave bibliothèque de conflit d'abord qui j'ai été en mesure de résoudre par l'ombrage de la goyave, de la bibliothèque et de la construction d'un snap-shot pot avec toutes les dépendances.
Cependant, j'ai été en mesure de charger des données pour certains fichiers, mais pour certains fichiers, j'obtiens le Codec Exception . Lorsque j'ai fait des recherches sur cette question, j'ai eu ces threads suivants sur la même question.
Après discussion, ce que je comprends, c'est soit c'est une mauvaise version de l'cassandra-pilote, je suis à l'aide . Ou il y a encore une classe de problème de chemin d'accès liées à la goyave de la bibliothèque comme cassandra 3.0 et versions ultérieures utilisent la goyave 16.0.1 et les discussions ci-dessus-dire qu'il pourrait y avoir une version basse de la goyave présent dans le chemin de classe .
Est ici pom.xml fichier
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.10</artifactId>
<version>1.5.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.datastax.spark</groupId>
<artifactId>spark-cassandra-connector-java_2.10</artifactId>
<version>1.5.0-M3</version>
</dependency>
<dependency>
<groupId>org.apache.cassandra</groupId>
<artifactId>cassandra-clientutil</artifactId>
<version>3.2.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
<relocations>
<relocation>
<pattern>com.google</pattern>
<shadedPattern>com.pointcross.shaded.google</shadedPattern>
</relocation>
</relocations>
<minimizeJar>false</minimizeJar>
<shadedArtifactAttached>true</shadedArtifactAttached>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
et ce sont les dépendances qui ont été téléchargés à l'aide de la pom
spark-core_2.10-1.5.0.jar
spark-cassandra-connector- java_2.10-1.5.0-M3.jar
spark-cassandra-connector_2.10-1.5.0-M3.jar
spark-repl_2.10-1.5.1.jar
spark-bagel_2.10-1.5.1.jar
spark-mllib_2.10-1.5.1.jar
spark-streaming_2.10-1.5.1.jar
spark-graphx_2.10-1.5.1.jar
guava-16.0.1.jar
cassandra-clientutil-3.2.1.jar
cassandra-driver-core-3.0.0-alpha4.jar
Ci-dessus sont quelques-uns des principaux dépendances dans mon snap-shot jar.
Y est le CodecNotFoundException ? Est-ce parce que le chemin de classe (goyave) ? ou cassandra-pilote (cassandra-driver-core-3.0.0-alpha4.jar pour datastax cassandra 3.2.1) ou parce que le code .
Un autre point est toutes les dates je suis insertion de colonnes qui est un type de données timestamp .
Aussi quand je fais une étincelle soumettre, je vois le chemin de classe dans les journaux , Il y a d'autres goyave versions qui sont sous hadoop libs . R ces à l'origine du problème ?
Comment spécifier l'utilisateur du chemin de classe, alors que faire une étincelle soumettre. Cela aidera ?
Serais heureux d'obtenir quelques points sur ces.
Grâce
Suivant est le stacktrace
com.datastax.driver.core.exceptions.CodecNotFoundException: Codec not found for requested operation: [timestamp <-> java.lang.String]
at com.datastax.driver.core.CodecRegistry.notFound(CodecRegistry.java:689)
at com.datastax.driver.core.CodecRegistry.createCodec(CodecRegistry.java:550)
at com.datastax.driver.core.CodecRegistry.findCodec(CodecRegistry.java:530)
at com.datastax.driver.core.CodecRegistry.codecFor(CodecRegistry.java:485)
at com.datastax.driver.core.AbstractGettableByIndexData.codecFor(AbstractGettableByIndexData.java:85)
at com.datastax.driver.core.BoundStatement.bind(BoundStatement.java:198)
at com.datastax.driver.core.DefaultPreparedStatement.bind(DefaultPreparedStatement.java:126)
at com.cassandra.test.LoadDataToCassandra$1.call(LoadDataToCassandra.java:223)
at com.cassandra.test.LoadDataToCassandra$1.call(LoadDataToCassandra.java:1)
at org.apache.spark.api.java.JavaPairRDD$$anonfun$toScalaFunction$1.apply(JavaPairRDD.scala:1027)
at scala.collection.Iterator$$anon$11.next(Iterator.scala:328)
at org.apache.spark.util.Utils$.getIteratorSize(Utils.scala:1555)
at org.apache.spark.rdd.RDD$$anonfun$count$1.apply(RDD.scala:1121)
at org.apache.spark.rdd.RDD$$anonfun$count$1.apply(RDD.scala:1121)
at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:1850)
at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:1850)
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:66)
at org.apache.spark.scheduler.Task.run(Task.scala:88)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:214)
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)
J'ai aussi eu
com.datastax.driver.core.exceptions.CodecNotFoundException: Codec not found for requested operation: [Math.BigDecimal <-> java.lang.String]
J'ai partagé le stacktrace
OriginalL'auteur Syed Ammar Mustafa | 2016-06-02
Vous devez vous connecter pour publier un commentaire.
Lorsque vous appelez
bind(params...)
sur unPreparedStatement
le chauffeur vous attend pour fournir des valeurs w/java les types de carte pour le cql types.Cette erreur (
[timestamp <-> java.lang.String]
) vous dit qu'il n'y a pas de tel Codec enregistré que les cartes de la javaString
à un cqltimestamp
. Dans le pilote java, letimestamp
type de cartes àjava.util.Date
. Si vous avez 2 options:Date
-valeur tapée au lieu d'unString
.timestamp <-> String
. Pour ce faire, vous pourriez créer une sous-classe deMappingCodec
comme décrit sur le site de documentation, que les cartes de Chaîne d'horodatage:Ensuite, vous devez enregistrer le Codec:
Autant que je me souvienne, il n'y avait pas de bugs majeurs dans alpha4, mais cela étant dit, il est un alpha et l'utilisation d'un GA version (3.0.2 de préférence) serait un meilleur choix. Pouvez-vous créer un nouveau sujet avec votre DEFAULT_SSL_CIPHER_SUITES erreur? Une modification a été effectuée dans la version 3.0 a été de ne pas exiger des suites de chiffrement à être explicitement mentionné. Je suppose que c'est quelque chose à voir avec cela.
J'ai mon cassandra colonne de table de type timeuuid. Pouvez-vous imaginer quel doit être le type de données dans Datastax Mappeur de classe
Vous serait d'étendre
MappingCodec<String, UUID>
et appelsuper(TypeCodec.timeUUID(), String.class);
dans le constructeur.OriginalL'auteur Andy Tolbert
Meilleure solution est fournie ici
OriginalL'auteur NGR