无法检索端点范围:java.lang.IllegalArgumentException

Could not retrieve endpoint ranges: java.lang.IllegalArgumentException

我正在尝试使用 sstableloader 实用程序将 sstables 加载到 cassandra。但是我收到以下错误。

> java.lang.IllegalArgumentException
java.lang.RuntimeException: Could not retrieve endpoint ranges: 
    at org.apache.cassandra.tools.BulkLoader$ExternalClient.init(BulkLoader.java:338)
    at org.apache.cassandra.io.sstable.SSTableLoader.stream(SSTableLoader.java:156)
    at org.apache.cassandra.tools.BulkLoader.main(BulkLoader.java:106)
Caused by: java.lang.IllegalArgumentException
    at java.nio.Buffer.limit(Buffer.java:275)
    at org.apache.cassandra.utils.ByteBufferUtil.readBytes(ByteBufferUtil.java:543)
    at org.apache.cassandra.serializers.CollectionSerializer.readValue(CollectionSerializer.java:124)
    at org.apache.cassandra.serializers.MapSerializer.deserializeForNativeProtocol(MapSerializer.java:101)
    at org.apache.cassandra.serializers.MapSerializer.deserializeForNativeProtocol(MapSerializer.java:30)
    at org.apache.cassandra.serializers.CollectionSerializer.deserialize(CollectionSerializer.java:50)
    at org.apache.cassandra.db.marshal.AbstractType.compose(AbstractType.java:68)
    at org.apache.cassandra.cql3.UntypedResultSet$Row.getMap(UntypedResultSet.java:287)
    at org.apache.cassandra.config.CFMetaData.fromSchemaNoTriggers(CFMetaData.java:1824)
    at org.apache.cassandra.config.CFMetaData.fromThriftCqlRow(CFMetaData.java:1117)
    at org.apache.cassandra.tools.BulkLoader$ExternalClient.init(BulkLoader.java:330)
    ... 2 mor

我用来加载 sstable 的命令是

$bin/sstableloader -d nodename -u username -pw password path/to/sstable/keyspacename/tablename

这是几天前的工作。我不确定发生了什么变化以及如何调试它? 我正在使用数据税。 我正在从 cluster.i.e 中的同一节点加载 sstable。e 我的源节点和目标节点相同。 有人以前见过这个错误吗? 卡桑德拉版本:2.1 感谢任何帮助。

堆栈跟踪中的异常来自这段代码:

    if (version >= Server.VERSION_3)
    {
        int size = input.getInt();
        if (size < 0)
            return null;

        return ByteBufferUtil.readBytes(input, size); // HERE !
    }

我想知道您是否正在加载由 Cassandra 2.1 或更旧版本生成的 sstables...。因为问题似乎在 byte-encoding 级别。

也有可能您的 SSTables 已损坏。

你是怎么得到这些 sstables 的?来自另一个 Cassandra 实例的副本?由 CQLSSTableWriter 生成 ?

我又遇到了这个问题,所以稍微调试了一下根源。问题是,如果您在任何时候通过删除某些列来更改您的 cassandra table。它会触发 sstableLoader 的错误。这就是为什么删除 table 并重新创建它的原因。