1

我多次成功使用sstableloader,但出现以下错误:

[root@localhost pengcz]# /usr/local/cassandra/bin/sstableloader -u user -pw password -v -d 172.21.0.131 ./currentdata/keyspace/table
Could not retrieve endpoint ranges:
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:267)
    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:1833)
    at org.apache.cassandra.config.CFMetaData.fromThriftCqlRow(CFMetaData.java:1126)
    at org.apache.cassandra.tools.BulkLoader$ExternalClient.init(BulkLoader.java:330)
    ... 2 more

我不知道这个错误是否与集群节点的 linux 崩溃之一有关?

任何建议将被认真考虑!

4

3 回答 3

0

您运行的 sstable 加载程序版本是否与集群版本不同?如果在 2.0 集群上使用 2.1 加载程序,则看起来像https://issues.apache.org/jira/browse/CASSANDRA-9324 。

于 2015-12-28T16:57:26.860 回答
0

我意识到这是一个老问题,但我在这里为后代发布答案。看起来你在打CASSANDRA-10700

TL;DR - 当 sstableloader 尝试读取架构时,它会在遇到已删除的集合列时失败。

该问题仅存在于 sstableloader 实用程序中,您可以通过从 Cassandra 2.1.13+ 获取副本来轻松解决此问题,如此所述。干杯!

于 2017-08-16T02:36:53.860 回答
0

/usr/local/cassandra/bin/sstableloader -u user -pw password -v -d 172.21.0.131 ./currentdata/keyspace/table进入这个命令,正如你提到的备份目录是 ./currentdata/keyspace/table,改变将表 dir 的父目录名称更改为要还原到的键空间名称,在键空间的位置并更改表 dir 的名称,因为这两个是 cassandra 保留的分隔符和 sstableloader 考虑备份目录的父目录(此处为 parent- >keyspace and backup-dir->table) 作为键空间名称,因此它应该与您要恢复数据的键空间名称相同。除此之外,请确保您的表名和键空间名不应作为 cassandra 保留的分隔符。

于 2015-12-28T20:18:34.983 回答