【问题标题】:cqlsh -e "copy table" hangs forevercqlsh -e "复制表" 永远挂起
【发布时间】:2019-10-23 03:15:56
【问题描述】:

我想将一些表从一个 Cassandra 集群复制到另一个;我认为最直接的方法是运行一系列 shell 命令,例如:

cqlsh -e "将keyspace.table1复制到'table1.csv',header = true;

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

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

使用 11 个子进程

keyspace.table1 的起始副本,列 [column1, column2, column3, column4]。

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

【问题讨论】:

  • 我们在使用 cqlsh.py 脚本时遇到了类似的问题,我们使用 -f 选项来输入 cql 文件。只是好奇,如果您找出可能的原因和解决方案

标签: cassandra


【解决方案1】:

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

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

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

您可以使用nodetool listsnapshots 验证快照,然后使用here 说明的过程恢复它。

完成此程序后,您需要使用nodetool clearsnapshot <snapshot_id> 进行房屋清洁

【讨论】:

  • 谢谢,我会试试的。还是想知道cqlsh为什么挂了,但也许没关系。
【解决方案2】:

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

您可以尝试的一个选项是减少批量大小。

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

这可能需要更长的时间,但肯定会结束。我在一个有近 3000 万条记录的表上遇到了类似的问题,并且减少了批量大小。

【讨论】:

  • > 您要复制的表中每行的行数和大小是多少?好吧,一个表只有 35,547 行——如果我从 cqlsh 运行复制命令(不带“-e”),复制所有 5M 表数据只需要 6 秒,但如果我用“-”运行完全相同的命令e" (或者如果我使用 -f 传递一系列命令)它只是挂起。我用 maxbatchsize 进行了尝试,我看到了相同的行为......如果它对你有用,那对我来说一定很奇怪。
猜你喜欢
  • 1970-01-01
  • 2012-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-29
相关资源
最近更新 更多