5

我正在尝试使用 CQL 客户端从 cassandra 导出数据。一个列族中大约有 100000 行。当我使用 COPY TO 命令将 dta 复制到 csv 文件中时,出现以下 rpc_time out 错误。

copy mycolfamily to '/root/mycolfamily.csv'
Request did not complete within rpc_timeout.

我正在运行:

[cqlsh 3.1.6 | Cassandra 1.2.8 | CQL spec 3.0.0 | Thrift protocol 19.36.0]

如何增加 RPC 超时限制?

我尝试在我的文件中添加rpc_timeout_in_ms: 20000(默认值为 10000) 。conf/cassandra.yaml但是在重新启动 cassandra 时,我得到:

[root@user ~]# null; Can't construct a java object for tag:yaml.org,2002:org.apache.cassandra.config.Config; exception=Cannot create property=rpc_timeout_in_ms for JavaBean=org.apache.cassandra.config.Config@71bfc4fc; Unable to find property 'rpc_timeout_in_ms' on class: org.apache.cassandra.config.Config
Invalid yaml; unable to start server.  See log for stacktrace.
4

4 回答 4

5

该命令当前与withCOPY执行相同的操作。因此,当您的数据增长时,它最终会超时。这是导出功能;SELECTLIMIT 99999999

https://github.com/apache/cassandra/blob/trunk/bin/cqlsh#L1524

我在生产上做同样的出口。我正在做的是以下内容;

  • make select * from table where timeuuid = someTimeuuid limit 10000
  • 将结果集写入带有 >> 模式的 csv 文件
  • 根据最后一个 timeuuid 进行下一个选择

您可以通过以下 cqlsh 命令在 cqlsh 中管道命令

echo "{$cql}" | /usr/bin/cqlsh -u user -p password localhost 9160 > file.csv

于 2013-09-18T14:10:06.277 回答
2

您可以通过在 Datastax Java 驱动程序中指定获取大小来使用自动分页。

Statement stmt = new SimpleStatement("SELECT id FROM mycolfamily;"); 
stmt.setFetchSize(500); 
session.execute(stmt); 
for (Row r:result.all()){
    //write to file
}
于 2015-01-20T06:56:26.193 回答
1

几分钟前我遇到了同样的问题,然后我找到了 CAPTURE 并且它有效:

首先开始在 cqlsh 上捕获,然后在您选择的一些限制条件下运行您的查询。

http://www.datastax.com/documentation/cql/3.0/cql/cql_reference/capture_r.html

于 2015-02-11T18:03:33.900 回答
0

导出数据的最佳方式是使用 nodetool 快照选项。这会立即返回,以后可以恢复。唯一的问题是此导出是针对每个节点和整个集群的。

示例:nodetool -h localhost -p 7199 快照

请参阅参考: http ://docs.datastax.com/en/archived/cassandra/1.1/docs/backup_restore.html#taking-a-snapshot

于 2015-05-31T07:38:34.917 回答