Cassandra 启动键';s标记在结束标记之后排序

Cassandra 启动键';s标记在结束标记之后排序,cassandra,Cassandra,我正在尝试使用Cassandra 1.2.6和ColumnFamilyInputFormat在Cassandra中运行一些进程。我得到了下面的堆栈跟踪。 我尝试切换到RandomPartitioner和multilPartitioner(在这两种情况下,我都从Begging重新创建了键空间),但问题仍然存在。 如何理解为什么会发生这种情况 java.lang.RuntimeException: InvalidRequestException(why:Start key's token sorts

我正在尝试使用Cassandra 1.2.6和ColumnFamilyInputFormat在Cassandra中运行一些进程。我得到了下面的堆栈跟踪。 我尝试切换到
RandomPartitioner
multilPartitioner
(在这两种情况下,我都从Begging重新创建了键空间),但问题仍然存在。 如何理解为什么会发生这种情况

java.lang.RuntimeException: InvalidRequestException(why:Start key's token sorts after end token)
at org.apache.cassandra.hadoop.ColumnFamilyRecordReader$WideRowIterator.maybeInit(ColumnFamilyRecordReader.java:453)
at org.apache.cassandra.hadoop.ColumnFamilyRecordReader$WideRowIterator.computeNext(ColumnFamilyRecordReader.java:459)
at org.apache.cassandra.hadoop.ColumnFamilyRecordReader$WideRowIterator.computeNext(ColumnFamilyRecordReader.java:406)
at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
at org.apache.cassandra.hadoop.ColumnFamilyRecordReader.getProgress(ColumnFamilyRecordReader.java:103)
at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.getProgress(MapTask.java:514)
at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.nextKeyValue(MapTask.java:539)
at org.apache.hadoop.mapreduce.MapContext.nextKeyValue(MapContext.java:67)
at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:143)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:764)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:370)
at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:212)
Caused by: InvalidRequestException(why:Start key's token sorts after end token)
at org.apache.cassandra.thrift.Cassandra$get_paged_slice_result.read(Cassandra.java:14168)
at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:78)
at org.apache.cassandra.thrift.Cassandra$Client.recv_get_paged_slice(Cassandra.java:769)
at org.apache.cassandra.thrift.Cassandra$Client.get_paged_slice(Cassandra.java:753)
at org.apache.cassandra.hadoop.ColumnFamilyRecordReader$WideRowIterator.maybeInit(ColumnFamilyRecordReader.java:438)
... 12 more

您正在使用的底层调用是get\u range\u slices,它返回一个行范围。您可以输入开始和结束令牌,也可以输入开始和结束密钥。看起来您正在使用开始和结束键

这方面的问题是,使用RandomPartitioner(MurruerPartitioner),密钥是按令牌顺序存储的。令牌是通过MD5散列(杂音散列)密钥获得的,因此令牌顺序通常不同于密钥顺序。因此,您只能在结束令牌大于开始令牌的情况下发出get\u range\u slices请求。如果指定一个密钥范围,如果hash(start)>hash(end),则请求将失败,即使start 我不知道你想做什么,但你可能想使用令牌范围。或者,如果要对结果进行分页,则将结束键设置为空,并使用给定的最后一个键作为下一个开始键