在 Cassandra 中迁移数据的最佳方式是什么

What is the best way to migrate data in Cassandra

我有一个包含 5 个节点的 Cassandra 集群 writeConsistency: LOCAL_QUORUM。集群有数 TB 的数据。现在我需要将数据迁移到同一集群中的不同 keyspace。以下是要求。

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

现在我们可以通过一些多实例微服务来做到这一点,我们可以从 keyspace_1 中读取数据,然后对其进行转换,然后将其插入到目标键空间中。

但是有没有更好的方法呢。我找到了一篇文章 How to migrate data from Cassandra cluster of size N to a different cluster of size N+/-M。但这里主要是 SSTable 在没有任何转换的情况下被转移。但是我需要一个介于两者之间的数据转换机制。任何人都可以在这里建议我一个好的方法/有人早些时候做过这种类型的 activity 吗?

最简单的方法是使用 Spark 加载数据、执行转换并将数据保存到新的 table(s) - 由于 Spark 能够执行数据处理的自动并行化,因此会更容易比使用 Spring 引导。根据您的要求,您可以使用 Spark SQL API or RDD API 的 Spark Cassandra 连接器。

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,那么您将需要对所有数据执行全面扫描、转换读取数据并写入它们 - 但这是一项更复杂的任务,因为您需要处理故障等。另外,从 Cassandra 有效读取数据不是一件容易的事 - 你可以看看这个 code example,但我建议先看看 Spark。