4

コードに次のカウンター クエリがあります。

private CounterSlice<String> queryLastCounts(Long key, String columnFamily,
                                                            int maxLength) {
    SliceCounterQuery<Long, String> query = 
            HFactory.createCounterSliceQuery(cassandra.getKeyspace(), 
                                                            LONG_S, STRING_S);
    query
        .setColumnFamily(columnFamily)
        .setKey(key)
        .setRange("", "", true, maxLength);
    return query.execute().get();
}

私の単体テストでは、コードは完全に機能します。しかし、適切なアプリケーションを実行すると(私はそのためにストームを使用しています)、次のエラーが発生します。

Caused by: InvalidRequestException(why:String didn't validate.)
at org.apache.cassandra.thrift.Cassandra$get_slice_result.read(Cassandra.java:7756)
at org.apache.cassandra.thrift.Cassandra$Client.recv_get_slice(Cassandra.java:570)
at org.apache.cassandra.thrift.Cassandra$Client.get_slice(Cassandra.java:542)
at me.prettyprint.cassandra.service.KeyspaceServiceImpl$8.execute(KeyspaceServiceImpl.java:308)
... 25 more

また、Cassandra へのアクセスには Hector を使用しています。

4

1 に答える 1

0

@Ar3s で提案されているように、この問題の解決策は次のとおりです。

列バリデーターをデフォルトのままにして、UTF8 を使用していました。解決策は、それを Long バリデーターに変更することで、すべてうまくいきました。

ここでの教訓は次のとおりです。

問題の列の Data Validator を確認してください。

于 2014-10-30T18:55:38.247 に答える