为什么我收到错误"无法检索端点范围"当我运行sstableloader?

时间:2015-12-28 04:10:01

标签: cassandra cassandra-2.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崩溃?

任何建议都将不胜感激!

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我意识到这是一个古老的问题,但我在这里为后人发布答案。看起来你正在点击CASSANDRA-10700

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

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