Кассандра: Python эквивалентный метод `sstabledump`? - PullRequest
0 голосов
/ 13 января 2020

Я пишу приложение для чтения sstable файлов cassandra (например, m c -1-big-Data.db). Мы не хотим делать это с помощью команды "sstabledump", которая потребует от нас установки cassandra в нашем кластере. Итак, у нас есть утилита python, которая может читать файлы .db и выводить данные в формате json.

1 Ответ

0 голосов
/ 13 января 2020

Нет эквивалента sstabledump в Python Я знаю, что это позволило бы получить прямой доступ к C* sstables.

В некоторых решениях можно использовать либо cql sh COPY TO (формат csv или txt) ) или dsbulk для получения данных в формате json напрямую

https://cassandra.apache.org/doc/latest/tools/cqlsh.html#copy -в

https://docs.datastax.com/en/dse/6.7/cql/cql/cql_reference/cqlsh_commands/cqlshCopy.html

https://docs.datastax.com/en/dsbulk/doc/dsbulk/reference/dsbulkCmd.html

Обратите внимание, что последний (dsbulk) использует драйвер java и подключается через клиентский порт для извлечения информации из кластера, что создает некоторую нагрузку на кластер во время извлечения - та же проблема с CQL SH.

Что касается использования sstabledump, непосредственное чтение sstables не обязательно является рекомендуемым подходом, так как оно включает в себя надгробные камни и дубликаты, основанные на коэффициенте репликации, поэтому имеется механизм анализ данных в большинстве случаев является лучшим вариантом (но если на самом деле цель заключается в том, чтобы сделать это, то установка C* на рассматриваемый кластер приложений может быть единственным способом).

РЕДАКТИРОВАТЬ: Таким образом, sstable2 json устарел согласно https://issues.apache.org/jira/browse/CASSANDRA-7464, поскольку я вижу, что это часть репо, упомянутая в предоставленном ответе, и jira объясняет причины этого.

Я не проверял решение в репо, но у dsbulk есть одно преимущество перед COPY TO, заключающееся в том, что он делает многопоточность, поскольку использует драйвер java. И может использоваться для запроса или выгрузки таблицы - см. Пример ниже таблицы экспорта ks.kv.

$ dsbulk unload -h $(hostname -i) -k ks -t kv --connector.name json --connector.json.url /home/user/export
Operation directory: /home/automaton/logs/UNLOAD_20200114-092515-429006
total | failed | rows/s | p50ms | p99ms | p999ms
    9 |      0 |     30 |  2.94 |  7.50 |   7.50
Operation UNLOAD_20200114-092515-429006 completed successfully in 0 seconds.
$ head /home/user/export/output-000001.json 
{"k":5,"v":5}
{"k":1,"v":1}
...

Боюсь, что нет готового решения (я знаю) для python эквивалент sstable2 json на более поздних версиях

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...