卡桑德拉COPY一直都失败了

时间:2015-10-22 07:46:31

标签: cassandra cqlsh

我试图导入一个大约有2000万行的CSV。

我做了一个带有几百行CSV的试运行,只是为了检查列是否有序并且没有解析错误。一切顺利。

每当我尝试导入2000万行CSV时,它会在不同的时间后失败。在我的本地计算机上,它在90分钟后失败并出现以下错误。在服务器上,它在10分钟内失败:

Processed 4050000 rows; Write: 624.27 rows/ss
code=1100 [Coordinator node timed out waiting for replica nodes' responses] message="Operation timed out - received only 0 responses." info=

{'received_responses': 0, 'required_responses': 1, 'write_type': 0, 'consistency': 1}
Aborting import at record #4050617. Previously-inserted values still present.
4050671 rows imported in 1 hour, 26 minutes, and 43.649 seconds.

Cassandra: Coordinator node timed out waiting for replica nodes' responses(它是一个单节点集群,复制因子是1,所以为什么它对另一个节点来说是另一个问题)

然后基于另一个线程中的建议我改变了写入时间,虽然我不相信它是根本原因。

write_request_timeout_in_ms: 20000 

(也尝试将其更改为300000)

但它最终仍然失败了。

现在,我已将原始CSV切割成许多500,000行CSV。 这具有更好的成功率(与0相比!)。但是,由于各种原因,即使是5次中的2次失败。

有时我会收到以下错误:

Processed 460000 rows; Write: 6060.32 rows/ss
Connection heartbeat failure
Aborting import at record #443491. Previously inserted records are still present, and some records after that may be present as well.

其他时候它只是停止更新控制台的进度,唯一的出路是使用Ctrl+C

中止

我一整天都在这样度过。我的RDBMS运行愉快,有50亿行。我想用10倍的数据来测试Cassandra,但我甚至无法一次导入一百万行。

关于COPY命令如何进行的一个观察结果是:一旦输入命令,它就开始以大约每秒10,000行的速率写入。它可以保持这个速度,直到它插入大约80,000行。然后有一个约30秒的暂停,之后它会消耗另外70,000到90,000行,再暂停30秒等等,直到它完成CSV中的所有行或者在错误中途失败或者只是挂起。

我需要找到这个的根源。我真的希望发现我做的事情很傻,这不是我必须接受和解决的事情。

我正在使用Cassandra 2.2.3

2 个答案:

答案 0 :(得分:5)

有很多人在使用COPY命令时遇到问题,似乎它适用于小型数据集,但是当你拥有大量数据时它会开始失败。

documentation中,如果您要导入几百万行,他们建议使用SSTable加载程序,我将它用于我的公司,并且我遇到了很多一致性问题。

我已经尝试了一切,对我来说,将大量数据导入cassandra最安全的方法是编写一个读取CSV然后执行异步查询的小脚本。 Python做得很好。

答案 1 :(得分:3)

意志是对的。 COPY适用于小型数据集,通常在您开始数百万行时遇到困难。除了SSTable加载器之外,还有这个实用程序:https://github.com/brianmhess/cassandra-loader我发现它具有非常好的性能和一些额外的便利性。