【问题标题】:How to COPY a large Cassandra table without running out of memory?如何在不耗尽内存的情况下复制大型 Cassandra 表?
【发布时间】:2018-10-28 03:45:13
【问题描述】:

我正在尝试运行一个简单的 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": ["[ Thu May 17 13:41:47 UTC 2018] 执行以下查询:", "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='| ';"

这个answer 看起来很有希望,但不幸的是它对我不起作用。

是否有什么我遗漏的东西阻止我在大型(相对而言)表上运行成功的 COPY?

--

编辑:此错误似乎是环境错误。我在具有几乎相同数据量的不同服务器上得到了不同的结果。

【问题讨论】:

标签: cassandra cql cqlsh


【解决方案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='|';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-13
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-24
    相关资源
    最近更新 更多