如何在不耗尽内存的情况下复制大型Cassandra表?

时间:2018-05-17 19:03:29

标签: cassandra cql cqlsh

我正在尝试运行一个简单的Cassandra数据库COPY脚本,如下面的示例(或一些非常相似的变体):

COPY my_keyspace_name.my_table_name TO 'cassandra_dump/my_keyspace_name.my_table_name.csv' WITH HEADER=true AND PAGETIMEOUT=40 AND PAGESIZE=20 AND DELIMITER='|';

它适用于大多数表,除了我最大的表。在那种情况下,我得到一个错误,它无法分配足够的内存。该表的文件大小远不及错误消息声称的数据量(小于1GB)。

  

749314行在9分钟和11.240秒内导出到1个文件。

     

./ dump_cassandra.sh:xmalloc:../../.././lib/sh/strtrans.c:63:无法分配18446744072166431589字节(分配6442528768字节)“,”stdout_lines“:[”[ 5月17日星期五13:41:47 UTC 2018]执行以下查询:“,”COPY my_keyspace_name.my_table_name TO'cassandra_dump / my_keyspace_name.my_table_name.csv'WOR HEADER = true AND PAGETIMEOUT = 40 AND PAGESIZE = 20 AND DELIMITER ='| “;“

answer似乎很有希望,但遗憾的是它对我不起作用。

是否有一些我遗漏的东西阻止我在大型(相对来说)的桌子上成功运行COPY?

-

编辑:此错误似乎是环保的。我在不同的服务器上获得了混合结果,数据量几乎相同。

1 个答案:

答案 0 :(得分:1)

设置MAXOUTPUTSIZE会将备份数据拆分为多个文件,并且不会导致发生此错误

COPY my_keyspace_name.my_table_name TO 'cassandra_dump/my_keyspace_name.my_table_name.csv' WITH HEADER=true AND PAGETIMEOUT=40 AND MAXOUTPUTSIZE=100000 AND DELIMITER='|';