Im в настоящее время работает с Apache Cassandra (версия Cassandra: 1.2.3, версия Thrift API: 19.35.0, поддерживаемые CQL версии: 2.0.0.3.0.1 (по умолчанию: 3.0.1)) и Hector 1.0.5.Cassandra: Hector, serializationException недопустимый заголовок строчки
Im, используя следующий код для вставки и извлечения объекта.
String cf="User";
key="myKey";
String colName="colName";
String colValue="colvalue";
Mutator<String> mutator = HFactory.createMutator(keyspace, StringSerializer.get());
mutator.insert(key, cf, HFactory.createStringColumn(colName, colValue));
ColumnQuery<String, String, Object> columnQuery = HFactory.createColumnQuery(
keyspace,
StringSerializer.get(),
StringSerializer.get(),
ObjectSerializer.get());
columnQuery.setColumnFamily(cf).setKey(key).setName(colName);
QueryResult<HColumn<String, Object>> r = columnQuery.execute();
System.out.println("Read HColumn from cassandra: " + r.get());
Но я получаю следующее исключение:
Exception in thread "main" me.prettyprint.hector.api.exceptions.HectorSerializationException: java.io.StreamCorruptedException: invalid stream header: 636F6C76
at me.prettyprint.cassandra.serializers.ObjectSerializer.fromByteBuffer(ObjectSerializer.java:79)
at me.prettyprint.cassandra.model.HColumnImpl.getValue(HColumnImpl.java:124)
at me.prettyprint.cassandra.model.HColumnImpl.toString(HColumnImpl.java:202)
at java.lang.String.valueOf(String.java:2854)
at java.lang.StringBuilder.append(StringBuilder.java:128)
at org.dargamenteria.tfg.texu.logic.UserDAOImpl.create(UserDAOImpl.java:111)
Но следующий код работает, только что изменил ObjectSerializer к StringSerializer:
Mutator<String> mutator = HFactory.createMutator(keyspace, StringSerializer.get());
mutator.insert(key, cf, HFactory.createStringColumn(colName, colValue));
ColumnQuery<String, String, String> columnQuery = HFactory.createColumnQuery(
keyspace,
StringSerializer.get(),
StringSerializer.get(),
StringSerializer.get());
columnQuery.setColumnFamily(cf).setKey(key).setName(colName);
QueryResult<HColumn<String, String>> r = columnQuery.execute();
System.out.println("Read HColumn from cassandra: " + r.get());
Спасибо за ваш ответ Abhi. В первом случае я определяю значение столбца как объекта, а сериализатор - ObjectSerializer, и когда я пытаюсь получить значение, я получил это исключение: «Исключение в потоке» main «me.prettyprint.hector.api.exceptions .HectorSerializationException: java.io.StreamCorruptedException: недопустимый заголовок потока: 636F6C76 « Но во втором столбце значения String и StringSerializer все работает правильно. И это то, что делает меня орехами. – Dani
hmmm .... во время создания семейства столбцов, я думаю, вы могли бы упомянуть валидатор значений столбца по умолчанию как UTF8Type. Можете ли вы поделиться выводами ** описать CF_NAME ** из cassandra-cli – abhi