在Cassandra中将数据从一个集群传输到另一个集群

问题描述 投票:0回答:2

我有一个旧的Cassandra集群,我想摆脱它,并希望将数据从只有几个选定的表从旧集群传输到我创建的新集群。我已经尝试在一个有大约1500万行(每行大约20列)的表上使用Cassandra的COPY命令。当我尝试将数据从csv文件导入到新集群中的同一个表时,我不断得到这个响应:

无法导入20行:WriteTimeout - 来自服务器的错误:代码= 1100 [协调器节点超时等待副本没有des'响应] message =“操作超时 - 仅收到0个响应。” info = {'received_responses':0,'required_resp onses':1,'consistency':'ONE'},稍后将重试,尝试1 of 5

显然,这种方法不起作用。有没有办法可以只将一些表从一个集群流式传输到另一个集群?请注意,虽然我们有数百万行,但数据并不是那么大。我拥有的最大的桌子大约是2.5 GB。

它们的键空间当前配置为使用SimpleStrategy。会使用NetworkTopologyStrategy帮忙吗?我应该指出,我只想从几个表中流式传输数据,而不是其他表。

cassandra datastax datastax-enterprise cassandra-3.0 datastax-startup
2个回答
1
投票

我建议使用sstableloader来完成这项工作。仅供参考,您也可以使用nodetool snapshot制作所需表格的副本,并在需要的地方使用它们。

另一方面,在任何类型的生产中使用简单策略绝不是一个好主意。 NetworkTopologyStrategy是一个很好的选择。


0
投票

我已成功使用您用于将数据从一个群集复制到另一个群集的策略。

通常,建议从快照还原。但是当用例不是将整个数据恢复到新的集群时,只是为了传输少数不那么大的表,COPY FROM然后COPY TO就是简单有效的策略。

坚持你的策略,只关注你得到的错误。

我建议尝试使用较小的批量。

  • cqlsh $ host -e“使用$ keyspace; COPY $ keyspace。$ table FROM'$ {file}'WITH MAXBATCHSIZE ='1'”;
© www.soinside.com 2019 - 2024. All rights reserved.