почему я получил ошибку Не удалось получить диапазоны конечных точек при запуске sstableloader?

Я успешно использовал 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 на одном из узлов кластера?

Любой совет будет оценен!


person abelard2008    schedule 28.12.2015    source источник


Ответы (3)


Используете ли вы загрузчик версии sstable, отличной от версии вашего кластера? Похоже на https://issues.apache.org/jira/browse/CASSANDRA-9324 при использовании загрузчика 2.1 на кластере 2.0.

person Chris Lohfink    schedule 28.12.2015

/usr/local/cassandra/bin/sstableloader -u user -pw password -v -d 172.21.0.131 ./currentdata/keyspace/table в эту команду, как упомянул ваш резервный каталог, как ./ currentdata/keyspace/table, измените имя родительского каталога каталога таблицы на имя пространства ключей, в которое вы восстанавливаете, в месте пространства ключей, а также измените имя каталога таблицы, поскольку эти два являются разделителями, сохраненными cassandra, и sstableloader рассматривает родительский каталог каталога резервных копий (здесь parent->keyspace и backup-dir->table) в качестве имени пространства ключей, поэтому оно должно совпадать с именем пространства ключей, в которое вы восстанавливаете данные. Кроме того, пожалуйста, убедитесь, что имя вашей таблицы и имя пространства ключей не должны быть разделителями, сохраненными cassandra.

person hemendra kumar    schedule 28.12.2015

Я понимаю, что это старый вопрос, но я отправляю ответ здесь для потомков. Похоже, вы нажимаете CASSANDRA-10700.

TL;DR. Когда sstableloader пытается прочитать схему, происходит сбой при обнаружении отброшенного столбца коллекций.

Проблема существует только в утилите sstableloader, и вы можете легко обойти ее, получив копию от Cassandra 2.1.13+ как задокументировано здесь. Ваше здоровье!

person Erick Ramirez    schedule 16.08.2017