2016-05-12 4 views
0

У меня есть таблица в cassandra, которая имеет столбец типа List, Когда я пытаюсь прочитать строку из этой таблицы, я вижу, что есть некоторая проблема при чтении столбца типа списка как указано ниже:Ошибка при получении данных, вызванная:. org.apache.cassandra.serializers.MarshalException

27296 [Thread-15-localhostAMQPbolt0-executor[2 2]] INFO c.i.c.c.CassandraClientBase - Returning cql query INSERT INTO "sensors"("pressure","pieces","temperature","idsensor","date","event_time") VALUES(10.0,[{"idpiece":'1',"width":10.0,"height":11.0,"depth":12.0},{"idpiece":'2',"width":10.0,"height":11.0,"depth":12.0},{"idpiece":'3',"width":10.0,"height":11.0,"depth":12.0}],10.0,'1',33544,0) . 
27319 [Thread-15-localhostAMQPbolt0-executor[2 2]] INFO d.d.SensorDAOImpl - select p from sensors p 
27498 [Thread-15-localhostAMQPbolt0-executor[2 2]] INFO c.i.c.c.CassandraClientBase - Executing cql query SELECT * FROM "sensors" LIMIT 100. 
27498 [Thread-15-localhostAMQPbolt0-executor[2 2]] INFO c.i.c.c.CassandraClientBase - Executing query SELECT * FROM "sensors" LIMIT 100. 
27745 [Thread-15-localhostAMQPbolt0-executor[2 2]] ERROR c.i.c.c.d.CassandraDataHandlerBase - Eror while retrieving data, Caused by: . 
org.apache.cassandra.serializers.MarshalException: Unexpected extraneous bytes after list value 
     at org.apache.cassandra.serializers.ListSerializer.deserializeForNativeProtocol(ListSerializer.java:104) ~[Zorro-0.0.1-SNAPSHOT-jar-with-dependencies.jar:?] 
     at com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.setElementCollectionList(CassandraDataHandlerBase.java:1727) ~[Zorro-0.0.1-SNAPSHOT-jar-with-dependencies.jar:?] 
     at com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.setElementCollection(CassandraDataHandlerBase.java:1568) ~[Zorro-0.0.1-SNAPSHOT-jar-with-dependencies.jar:?] 
     at com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.populateViaThrift(CassandraDataHandlerBase.java:1154) ~[Zorro-0.0.1-SNAPSHOT-jar-with-dependencies.jar:?] 
     at com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.onColumn(CassandraDataHandlerBase.java:1054) ~[Zorro-0.0.1-SNAPSHOT-jar-with-dependencies.jar:?] 
     at com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.populateEntity(CassandraDataHandlerBase.java:653) [Zorro-0.0.1-SNAPSHOT-jar-with-dependencies.jar:?] 
     at com.impetus.client.cassandra.CassandraClientBase$CQLClient.executeQuery(CassandraClientBase.java:2301) [Zorro-0.0.1-SNAPSHOT-jar-with-dependencies.jar:?] 
     at com.impetus.client.cassandra.CassandraClientBase.executeSelectQuery(CassandraClientBase.java:926) [Zorro-0.0.1-SNAPSHOT-jar-with-dependencies.jar:?] 
     at com.impetus.client.cassandra.thrift.ThriftClient.executeQuery(ThriftClient.java:1062) [Zorro-0.0.1-SNAPSHOT-jar-with-dependencies.jar:?] 
     at com.impetus.client.cassandra.query.CassQuery.populateEntities(CassQuery.java:146) [Zorro-0.0.1-SNAPSHOT-jar-with-dependencies.jar:?] 
     at com.impetus.kundera.query.QueryImpl.fetch(QueryImpl.java:1377) [Zorro-0.0.1-SNAPSHOT-jar-with-dependencies.jar:?] 
     at com.impetus.kundera.query.QueryImpl.getResultList(QueryImpl.java:200) [Zorro-0.0.1-SNAPSHOT-jar-with-dependencies.jar:?] 
     at database.dao.SensorDAOImpl.findByQuery(SensorDAOImpl.java:84) [Zorro-0.0.1-SNAPSHOT-jar-with-dependencies.jar:?] 
     at database.controller.DatabaseController.saveSensorEntitie(DatabaseController.java:47) [Zorro-0.0.1-SNAPSHOT-jar-with-dependencies.jar:?] 
     at connector.bolt.PrinterBolt.execute(PrinterBolt.java:66) [Zorro-0.0.1-SNAPSHOT-jar-with-dependencies.jar:?] 
     at org.apache.storm.daemon.executor$fn__8226$tuple_action_fn__8228.invoke(executor.clj:731) [storm-core-1.0.0.jar:1.0.0] 
     at org.apache.storm.daemon.executor$mk_task_receiver$fn__8147.invoke(executor.clj:463) [storm-core-1.0.0.jar:1.0.0] 
     at org.apache.storm.disruptor$clojure_handler$reify__7663.onEvent(disruptor.clj:40) [storm-core-1.0.0.jar:1.0.0] 
     at org.apache.storm.utils.DisruptorQueue.consumeBatchToCursor(DisruptorQueue.java:435) [storm-core-1.0.0.jar:1.0.0] 
     at org.apache.storm.utils.DisruptorQueue.consumeBatchWhenAvailable(DisruptorQueue.java:414) [storm-core-1.0.0.jar:1.0.0] 
     at org.apache.storm.disruptor$consume_batch_when_available.invoke(disruptor.clj:73) [storm-core-1.0.0.jar:1.0.0] 
     at org.apache.storm.daemon.executor$fn__8226$fn__8239$fn__8292.invoke(executor.clj:851) [storm-core-1.0.0.jar:1.0.0] 
     at org.apache.storm.util$async_loop$fn__554.invoke(util.clj:484) [storm-core-1.0.0.jar:1.0.0] 
     at clojure.lang.AFn.run(AFn.java:22) [clojure-1.7.0.jar:?] 
     at java.lang.Thread.run(Thread.java:745) [?:1.7.0_99] 
27753 [Thread-15-localhostAMQPbolt0-executor[2 2]] ERROR c.i.c.c.CassandraClientBase - Error while executing native CQL query Caused by {}. 
javax.persistence.PersistenceException: org.apache.cassandra.serializers.MarshalException: Unexpected extraneous bytes after list value 
     at com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.populateEntity(CassandraDataHandlerBase.java:833) ~[Zorro-0.0.1-SNAPSHOT-jar-with-dependencies.jar:?] 
     at com.impetus.client.cassandra.CassandraClientBase$CQLClient.executeQuery(CassandraClientBase.java:2301) [Zorro-0.0.1-SNAPSHOT-jar-with-dependencies.jar:?] 
     at com.impetus.client.cassandra.CassandraClientBase.executeSelectQuery(CassandraClientBase.java:926) [Zorro-0.0.1-SNAPSHOT-jar-with-dependencies.jar:?] 
     at com.impetus.client.cassandra.thrift.ThriftClient.executeQuery(ThriftClient.java:1062) [Zorro-0.0.1-SNAPSHOT-jar-with-dependencies.jar:?] 
     at com.impetus.client.cassandra.query.CassQuery.populateEntities(CassQuery.java:146) [Zorro-0.0.1-SNAPSHOT-jar-with-dependencies.jar:?] 
     at com.impetus.kundera.query.QueryImpl.fetch(QueryImpl.java:1377) [Zorro-0.0.1-SNAPSHOT-jar-with-dependencies.jar:?] 
     at com.impetus.kundera.query.QueryImpl.getResultList(QueryImpl.java:200) [Zorro-0.0.1-SNAPSHOT-jar-with-dependencies.jar:?] 
     at database.dao.SensorDAOImpl.findByQuery(SensorDAOImpl.java:84) [Zorro-0.0.1-SNAPSHOT-jar-with-dependencies.jar:?] 
     at database.controller.DatabaseController.saveSensorEntitie(DatabaseController.java:47) [Zorro-0.0.1-SNAPSHOT-jar-with-dependencies.jar:?] 
     at connector.bolt.PrinterBolt.execute(PrinterBolt.java:66) [Zorro-0.0.1-SNAPSHOT-jar-with-dependencies.jar:?] 
     at org.apache.storm.daemon.executor$fn__8226$tuple_action_fn__8228.invoke(executor.clj:731) [storm-core-1.0.0.jar:1.0.0] 
     at org.apache.storm.daemon.executor$mk_task_receiver$fn__8147.invoke(executor.clj:463) [storm-core-1.0.0.jar:1.0.0] 
     at org.apache.storm.disruptor$clojure_handler$reify__7663.onEvent(disruptor.clj:40) [storm-core-1.0.0.jar:1.0.0] 
     at org.apache.storm.utils.DisruptorQueue.consumeBatchToCursor(DisruptorQueue.java:435) [storm-core-1.0.0.jar:1.0.0] 
     at org.apache.storm.utils.DisruptorQueue.consumeBatchWhenAvailable(DisruptorQueue.java:414) [storm-core-1.0.0.jar:1.0.0] 
     at org.apache.storm.disruptor$consume_batch_when_available.invoke(disruptor.clj:73) [storm-core-1.0.0.jar:1.0.0] 
     at org.apache.storm.daemon.executor$fn__8226$fn__8239$fn__8292.invoke(executor.clj:851) [storm-core-1.0.0.jar:1.0.0] 
     at org.apache.storm.util$async_loop$fn__554.invoke(util.clj:484) [storm-core-1.0.0.jar:1.0.0] 
     at clojure.lang.AFn.run(AFn.java:22) [clojure-1.7.0.jar:?] 
     at java.lang.Thread.run(Thread.java:745) [?:1.7.0_99] 
Caused by: org.apache.cassandra.serializers.MarshalException: Unexpected extraneous bytes after list value 
     at org.apache.cassandra.serializers.ListSerializer.deserializeForNativeProtocol(ListSerializer.java:104) ~[Zorro-0.0.1-SNAPSHOT-jar-with-dependencies.jar:?] 
     at com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.setElementCollectionList(CassandraDataHandlerBase.java:1727) ~[Zorro-0.0.1-SNAPSHOT-jar-with-dependencies.jar:?] 
     at com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.setElementCollection(CassandraDataHandlerBase.java:1568) ~[Zorro-0.0.1-SNAPSHOT-jar-with-dependencies.jar:?] 
     at com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.populateViaThrift(CassandraDataHandlerBase.java:1154) ~[Zorro-0.0.1-SNAPSHOT-jar-with-dependencies.jar:?] 
     at com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.onColumn(CassandraDataHandlerBase.java:1054) ~[Zorro-0.0.1-SNAPSHOT-jar-with-dependencies.jar:?] 
     at com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.populateEntity(CassandraDataHandlerBase.java:653) ~[Zorro-0.0.1-SNAPSHOT-jar-with-dependencies.jar:?] 
     ... 19 more 

, но экономия данных работает без проблем.

Вот как создается диспетчер объектов:

Map propertyMap = new HashMap(); 
propertyMap.put(CassandraConstants.CQL_VERSION, CassandraConstants.CQL_VERSION_3_0); 
EntityManagerFactory emf = Persistence.createEntityManagerFactory("cassandra_pu", propertyMap); 
EntityManager em = emf.createEntityManager(); 

А вот информация о Кассандре:

[cqlsh 5.0.1 | Кассандра 2.1.12 | CQL spec 3.2.1 | Native протокол v3]

<dependency> 
      <groupId>com.impetus.kundera.client</groupId> 
      <artifactId>kundera-cassandra</artifactId> 
      <version>3.4</version> 
     </dependency> 

ответ

0

Я решил эту проблему путем установки Cassandra 3.4, а также с помощью генерации автоматической схемы.

Я добавил эту линию в своих ресурсов/META-INF/persistence.xml файл

<property name="kundera.ddl.auto.prepare" value="create" /> 
Смежные вопросы