How to copy a columnfamily from one cassandra cluster to another?
Scenario:
-
我只有主机的IP(对于源和目标集群),端口,key_space名称和column_family名称 .
-
我已经在目标集群中创建了元数据(只需要复制数据) .
-
Most preferentially ,我希望使用spark-cassandra连接器JAVA API在单个/多个spark作业(中间创建DataFrame,然后保存它)中完成此操作 .
-
Moderate preferentially ,使用来自datastax的cassandra-java驱动程序 .
-
Least preferentially ,使用cassandra-jdbc驱动程序和spark-cassandra连接器JAVA API .
任何帮助将不胜感激 . 谢谢 .
4 回答
在现有集群上拍摄快照并在目标集群上使用批量加载器,不需要Spark(尽管您可以这样做) .
以下是程序的the docs,但我将提供您需要做的高级概述 .
在现有群集上拍摄快照
将快照发送(
scp
)到新群集上的节点创建模式的克隆(你说你已经完成了这个)
使用bulk-loader将sstables从快照流式传输到新集群 .
经过大量的努力,我们找到了解决方案 . 这个解决方案非常简单和疯狂 . 我们可以使用spark做到这一点,让我们看看 .
What we were doing(which didn't worked):
What worked fine:
是的,没错,你只需要在spark-cassandra主机属性中更改 period(.) to underscore( _ ) 属性 . 我不知道这是不是spark-cassandra连接器中的错误 .
如果您正在使用spark-cassandra-connector,则默认情况下它支持连接多个群集 . 相关的代码段如下:
Here是相关文档和示例代码段 .
Java示例
这会奏效
主要部分使用com.datastax.spark.connector.cql.CassandraConnector和writerBuilder:
中提琴!你完成了!
https://datastax-oss.atlassian.net/browse/SPARKC-340