cqlsh -e“复制表”永久挂起

时间:2019-06-07 15:28:01

标签: cassandra

我有几个表要从一个Cassandra集群复制到另一个表;我认为最简单的方法是运行一系列shell命令,例如:

cqlsh -e“将header.true的keyspace.table1复制到'table1.csv';

(然后是一系列反向shell命令以复制到新集群中)。

但是,当我运行它时,我看到:

使用11个子进程

从[column1,column2,column3,column4]列开始复制keyspace.table1。

但是该过程会永远挂起,永远不会添加到目标CSV文件中。

2 个答案:

答案 0 :(得分:0)

使用对表进行快照可能更有效

nodetool snapshot -cf <table_name> -t <snpashot_id> <keyspace>

其中键空间和表名称是您的结构的名称; snapshot_id将是一个标签,可帮助您识别快照。

您将很容易用nodetool listsnapshots验证快照,然后按照here中说明的过程进行还原。

完成该过程后,您需要使用nodetool clearsnapshot <snapshot_id>

进行一些房屋打扫。

答案 1 :(得分:0)

您要复制的表中的行数是多少,每行的大小是多少?如果行和行数都很大,则使用COPY并不是最佳选择。

您可以尝试的一种选择是减小批量大小。

cqlsh -e "copy table keyspace.table1 to 'table1.csv' with header = true AND MAXBATCHSIZE=5;

这可能需要更长的时间,但是肯定会结束。我曾经遇到过类似的问题,该表具有近3000万条记录,并减少了批处理量。