Каков наилучший способ переноса данных в Кассандре? - PullRequest
1 голос
/ 22 января 2020

У меня кластер Cassandra из 5 узлов с writeConsistency: LOCAL_QUORUM. Кластер имеет ТБ Данных. Теперь мне нужно перенести данные в другой keyspace в том же кластере. Ниже приведено требование.

keyspace_1 --> read data --> transform --> insert in keyspace_2.

Теперь мы можем сделать это с помощью нескольких микросервисов с несколькими экземплярами, где мы можем прочитать данные из keyspace_1, а затем преобразовать их и затем вставить их в целевое пространство ключей.

Но есть ли лучший подход к этому. Я нашел статью Как перенести данные из кластера Cassandra размера N в другой кластер размера N +/- M . Но здесь в основном SSTable переносится без каких-либо преобразований. Но мне нужен механизм преобразования данных между ними. Может кто-нибудь предложить мне хороший подход здесь / кто-то делал этот вид деятельности ранее?

1 Ответ

1 голос
/ 22 января 2020

Простейшим способом будет использование Spark для загрузки данных, выполнения преобразований и сохранения данных в новых таблицах - поскольку Spark способен автоматизировать c распараллеливание обработки данных, это будет проще, чем использовать Весенний ботинок. В зависимости от ваших требований вы можете использовать либо Spark SQL API , либо RDD API Spark Cassandra Connector.

val df = sqlContext.read
  .format("org.apache.spark.sql.cassandra")
  .options(Map("keyspace" -> "ks", "table" -> "tab))
  .load

val dfTransformed = df.select.... // do transformation

dfTransformed.write
  .format("org.apache.spark.sql.cassandra")
  .options(Map("keyspace" -> "ks2", "table" -> "tab))
  .save

Если вы не будете использовать Spark, вам нужно будет выполнить полное сканирование всех данных, преобразовать прочитанные данные и записать их - но это более сложная задача, так как вам придется обрабатывать сбои и др. c. Кроме того, эффективное чтение данных с Кассандры не простая задача - вы можете посмотреть на этот пример кода , но я предлагаю сначала обратиться к Spark.

...