在cassandra上进行计数器查询时发生java字符串验证错误

dddzy1tm  于 2021-06-25  发布在  Storm
关注(0)|答案(1)|浏览(323)

我对我的代码有以下反查询:

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();
}

在我的单元测试中,代码运行得非常好。但在运行正确的应用程序时(我使用的是storm),会出现以下错误:

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。

rm5edbpk

rm5edbpk1#

正如@ar3s所建议的,这里是这个问题的解决方案。
我把我的列验证器作为默认值,它使用utf8。解决方案是将其更改为长验证器,然后一切正常。
这里的教训是:
检查您的数据验证器中有问题的列。

相关问题