Ошибка Гектора при вставке целого числа

Я запускаю экземпляр Cassandra с одним узлом (для целей разработки) и хочу вставить в него целочисленную строку. Мое пространство ключей и семейство столбцов уже созданы на Cassandra.

Я использую Cassandra 1.0 с Hector 1.0.5 (версия Jar). Мой код выглядит следующим образом:

Cluster cluster = HFactory.getOrCreateCluster("Test Cluster", "10.40.14.93:9160");

Keyspace keyspaceOperator = HFactory.createKeyspace("mykeyspace", cluster)

Mutator intM = HFactory.createMutator(keyspaceOperator, IntegerSerializer.get());

for each elem in my list {

 intM.insert(doc.document_id , 
            "mycolfamily",
            me.prettyprint.hector.api.factory.HFactory.createColumn("numAdults", doc.numAdults))
}

Я получаю TimedOutException на своем клиенте, и в журналах Cassandra я вижу следующее:

ERROR [MutationStage:357] 2012-07-20 08:15:02,106 AbstractCassandraDaemon.java (line  139) Fatal exception in thread Thread[MutationStage:357,5,main]
java.lang.RuntimeException: java.lang.NumberFormatException: For input string: ""
        at org.apache.cassandra.service.StorageProxy$DroppableRunnable.run(StorageProxy.java:1228)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.NumberFormatException: For input string: ""
        at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
        at java.lang.Long.parseLong(Long.java:410)
        at java.lang.Long.parseLong(Long.java:468)
        at org.apache.solr.schema.TrieField.createField(TrieField.java:508)
        at org.apache.solr.schema.FieldType.createFields(FieldType.java:292)
        at org.apache.solr.schema.SchemaField.createFields(SchemaField.java:106)
        at com.datastax.bdp.cassandra.index.solr.SolrSecondaryIndex.addFieldToDocument(SolrSecondaryIndex.java:382)
        at com.datastax.bdp.cassandra.index.solr.SolrSecondaryIndex.populateDocument(SolrSecondaryIndex.java:280)
        at com.datastax.bdp.cassandra.index.solr.SolrSecondaryIndex.applyIndexUpdates(SolrSecondaryIndex.java:164)
        at org.apache.cassandra.db.index.SecondaryIndexManager.applyIndexUpdates(SecondaryIndexManager.java:419)
        at org.apache.cassandra.db.Table.apply(Table.java:448)
        at org.apache.cassandra.db.RowMutation.apply(RowMutation.java:256)
        at org.apache.cassandra.service.StorageProxy$6.runMayThrow(StorageProxy.java:415)
        at org.apache.cassandra.service.StorageProxy$DroppableRunnable.run(StorageProxy.java:1224)
        ... 3 more
ERROR [MutationStage:357] 2012-07-20 08:15:02,106 AbstractCassandraDaemon.java (line 139) Fatal exception in thread Thread[MutationStage:357,5,main]
java.lang.RuntimeException: java.lang.NumberFormatException: For input string: ""
        at org.apache.cassandra.service.StorageProxy$DroppableRunnable.run(StorageProxy.java:1228)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.NumberFormatException: For input string: ""
        at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
        at java.lang.Long.parseLong(Long.java:410)
        at java.lang.Long.parseLong(Long.java:468)
        at org.apache.solr.schema.TrieField.createField(TrieField.java:508)
        at org.apache.solr.schema.FieldType.createFields(FieldType.java:292)
        at org.apache.solr.schema.SchemaField.createFields(SchemaField.java:106)
        at com.datastax.bdp.cassandra.index.solr.SolrSecondaryIndex.addFieldToDocument(SolrSecondaryIndex.java:382)
        at com.datastax.bdp.cassandra.index.solr.SolrSecondaryIndex.populateDocument(SolrSecondaryIndex.java:280)
        at com.datastax.bdp.cassandra.index.solr.SolrSecondaryIndex.applyIndexUpdates(SolrSecondaryIndex.java:164)
        at org.apache.cassandra.db.index.SecondaryIndexManager.applyIndexUpdates(SecondaryIndexManager.java:419)
        at org.apache.cassandra.db.Table.apply(Table.java:448)
        at org.apache.cassandra.db.RowMutation.apply(RowMutation.java:256)
        at org.apache.cassandra.service.StorageProxy$6.runMayThrow(StorageProxy.java:415)
        at org.apache.cassandra.service.StorageProxy$DroppableRunnable.run(StorageProxy.java:1224)

}

Я испытываю Datastax Enterprise (DSE), который упаковывает Cassandra, Hadoop, Solr и т. д. Я создал свою Cassandra CF с помощью конфигурации Solr (вы можете опубликовать конфигурацию Solr и xml-схемы в экземпляре Datastax для создания Keyspace и CF — это функция ДСЭ)

Может ли кто-нибудь помочь?


person Ameya    schedule 20.07.2012    source источник
comment
Можете ли вы обновить вопрос с помощью запроса, который вы использовали для создания семейств столбцов? Кажется, где-то несоответствие типов   -  person Chander Shivdasani    schedule 12.09.2012


Ответы (1)


Попробуйте добавить явный сериализатор в ваш вызов createColumn... вот так:

me.prettyprint.hector.api.factory.HFactory.createColumn("numAdults", doc.numAdults, StringSerializer.get(), IntegerSerializer.get()))

Кроме того, в другом примечании я вижу, что вы делаете вставки в цикле. Выполнение intM.addInsertion внутри цикла, а затем intM.execute() после его завершения более эффективно.

person Eugene Feingold    schedule 20.07.2012
comment
Привет Евгений - Спасибо за это. Я пробовал это, но, к сожалению, я все еще получаю ту же ошибку. Не уверен, что идет не так :( - person Ameya; 23.07.2012