Cassandra- Pelops: Erreur de méthode sans erreur lors de la tentative d'insertion de données dans Cassandra
-
28-10-2019 - |
Question
J'obtiens l'erreur suivante lorsque j'essaie d'insérer des données dans Cassandra à l'aide de l'api pelops
java.lang.NoSuchMethodError: org.apache.cassandra.thrift.Column.<init>(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;J)V
J'utilise les fichiers JAR suivants
- scale7-core-1.3.0.jar
- scale7-pelops-0.912-0.7.0-rc4-1.jar
- Tous les jars du répertoire lib de cassandra-1.0.5
L'appel à la fonction suivante provoque une exception
public void writeToBatch(String columnFamily, String rowKey, String colmName,String value, int ttl)
{
this.mutator.writeColumn(columnFamily, rowKey,
mutator.newColumn(colmName, value, ttl));
}
La pile d'erreurs est la suivante:
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.cassandra.thrift.Column.<init>(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;J)V
at org.scale7.cassandra.pelops.Mutator.newColumn(Mutator.java:625)
at org.scale7.cassandra.pelops.Mutator.newColumn(Mutator.java:562)
at com.audienceadnetwork.cassandra.sstablewriter.utils.PelopsClient.writeToBatch(Unknown Source)
La solution
Vous mélangez les liaisons d'épargne construites contre cassandra-1.0.5 avec une version de pelops construite sur des liaisons d'épargne beaucoup plus anciennes.L'API elle-même est rétrocompatible mais vous ne pouvez pas mélanger des liaisons comme celle-ci.Vous avez deux options:
La meilleure option est probablement de passer à une version plus récente de pelops.Il existe des versions instantanées disponibles pour les versions 1.0.x en fonction de leur github: https://github.com/s7/ scale7-pelops .
Si, pour une raison quelconque, vous devez utiliser la version de pelops utilisée ci-dessus, vous devez également utiliser les fixations cassandra thrift dont dépend cette version, plutôt que celles construites avec cassandra 1.0.5.