#cassandra #datastax #dsbulk
#cassandra #datastax #dsbulk
Вопрос:
Я хочу запустить команду выгрузки dsbulk, но в моем кластере cassandra ~ 1 ТБ данных в таблице, которую я хочу экспортировать. Есть ли способ запустить команду выгрузки dsbulk и передать данные в s3, а не записывать на диск?
Я запускаю следующую команду в своей среде разработки, но, очевидно, это просто запись на диск на моем компьютере
bin/dsbulk unload -k myKeySpace -t myTable -url ~/data --connector.csv.compression gzip
Ответ №1:
Он не поддерживает его «изначально» из коробки. Теоретически это может быть реализовано, поскольку DSBulk теперь имеет открытый исходный код, но кто-то должен это сделать.
Обновление: обходным путем может быть, как указал Адам, использование aws s3 cp
и передача к нему из DSBulk, например:
dsbulk unload .... |aws s3 cp - s3://...
но есть ограничение — выгрузка будет выполняться в одном потоке, поэтому выгрузка может быть намного медленнее.
В краткосрочной перспективе вы можете использовать Apache Spark в режиме локального мастера с Spark Cassandra Connector, что-то вроде этого (для Spark 2.4):
spark-shell --packages com.datastax.spark:spark-cassandra-connector-assembly_2.11:2.5.1
и внутри:
val data = spark.read.format("org.apache.spark.sql.cassandra")
.options(Map( "table" -> "table_name", "keyspace" -> "keyspace_name")).load()
data.write.format("json").save("s3a://....")
Комментарии:
1. Есть ли какая-либо причина, по которой человек не должен просто передавать стандартный вывод
aws s3 cp
dsbulk?2. выполнение одного потока, но да — это хороший момент, позвольте мне обновить