将数据从一个cassandra集群传输到另一个集群的最佳方式

9udxz4iz  于 2021-06-10  发布在  Cassandra
关注(0)|答案(2)|浏览(338)

我需要将数据从一个集群传输到另一个集群。
两个集群上的表结构是相同的,我需要做的是从表a中选择数据,集群1上的集群键a1并将其复制到表b,集群2上的集群键a1。
这个集群键有大量的条目,我想>50.000.000
我不想也不能复制整个表,因为这个表中的集群之间的数据是不同的。
一种选择是编写一个脚本并循环遍历数据,写入集群2。这会起作用,但听起来效率很低,需要解决诸如“如果此脚本在操作过程中崩溃,该怎么办?”
最好的方法是什么?

ttp71kqs

ttp71kqs1#

根据我的经验,spark提供了最好的机制来进行这些活动。你可以用 RDDs 以及 DataFrame 两者都有。以下是参考链接中的代码段:

import com.datastax.spark.connector._
import com.datastax.spark.connector.cql._

import org.apache.spark.SparkContext

sqlContext.setConf("ClusterOne/spark.cassandra.connection.host", "127.0.0.1")
sqlContext.setConf("ClusterTwo/spark.cassandra.connection.host", "127.0.0.2")

//Read from ClusterOne
val dfFromClusterOne = sqlContext
  .read
  .format("org.apache.spark.sql.cassandra")
  .options(Map( 
    "cluster" -> "ClusterOne",
    "keyspace" -> "ks",
    "table" -> "A"
    ))
  .load
  .filter($"id" === 'A1')

//Write to ClusterTwo
dfFromClusterOne
  .write
  .format("org.apache.spark.sql.cassandra")
  .options(Map( 
    "cluster" -> "ClusterTwo",
    "keyspace" -> "ks",
    "table" -> "B"
    ))
  .save
}

参考链接:
http://www.russellspitzer.com/2016/02/16/multiple-clusters-sparksql-cassandra/
在cassandra中将数据从一个集群传输到另一个集群

7cwmlq89

7cwmlq892#

对于批量数据复制,应该考虑sstableloader。这是从一个集群复制数据并加载到另一个集群的好工具。请参阅以下文件。https://cassandra.apache.org/doc/latest/tools/sstable/sstableloader.html?highlight=sstableloader

相关问题