我正在使用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
这是几天前工作的。我不确定这些是什么改变了,如何调试它? 我正在使用datastax。 我从群集中的同一节点加载sstable。我的源节点和目标节点是相同的。 之前有人见过这个错误吗? Cassandra版本:2.1 任何帮助表示赞赏。
答案 0 :(得分: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 ....因为问题似乎是在字节编码级别。
您的SSTable也可能已损坏。
你是如何得到那些sstables的?从另一个Cassandra实例的副本?由CQLSSTableWriter生成?
答案 1 :(得分:0)
我又遇到了这个问题,所以为了根本原因调试了一下。问题是,如果你在任何时候通过删除一些列来改变你的cassandra表。它会触发sstableLoader的错误。这就是为什么放弃桌子并再次创建它的原因。