我正在尝试使用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
文件中添加conf/cassandra.yaml
(defalut为10000)。但是当我重新启动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.
答案 0 :(得分:5)
COPY
命令当前对SELECT
LIMIT 99999999
执行相同的操作。因此,当数据增长时,它最终会超时。这是导出功能;
https://github.com/apache/cassandra/blob/trunk/bin/cqlsh#L1524
我在生产上做同样的出口。我正在做的是以下内容;
您可以通过以下cqlsh命令在cqlsh中管道命令
echo "{$cql}" | /usr/bin/cqlsh -u user -p password localhost 9160 > file.csv
答案 1 :(得分: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
}
答案 2 :(得分:1)
几分钟前我遇到了同样的问题然后我找到了CAPTURE并且它有效:
首先开始捕获cqlsh然后运行您的查询,并限制您的选择。
http://www.datastax.com/documentation/cql/3.0/cql/cql_reference/capture_r.html
答案 3 :(得分:0)
导出数据的最佳方法是使用nodetool snapshot选项。这会立即返回,以后可以恢复。唯一的问题是这个导出是每个节点和整个集群。
实施例: nodetool -h localhost -p 7199快照
参见参考: http://docs.datastax.com/en/archived/cassandra/1.1/docs/backup_restore.html#taking-a-snapshot