Cassandra COPY始终失败

Doj*_*ojo 4 cassandra cqlsh

我正在尝试导入具有约2000万行的CSV。

我进行了一次试运行,使用了几百行CSV,只是为了检查各列是否顺序正确,并且没有解析错误。一切顺利。

每次我尝试导入2,000万行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.
Run Code Online (Sandbox Code Playgroud)

Cassandra:协调器节点等待复制节点的响应超时(这是一个节点群集,复制因子为1,所以为什么要等待其他节点是另一个问题)

然后根据另一个线程中的建议,我更改了写超时,尽管我不确定这是根本原因。

write_request_timeout_in_ms: 20000 
Run Code Online (Sandbox Code Playgroud)

(也尝试将其更改为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.
Run Code Online (Sandbox Code Playgroud)

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

我大部分时间都是这样度过的。我的RDBMS运行着50亿行,愉快地运行着。我想用10倍的数据测试Cassandra,但即使一次导入一百万行也遇到了麻烦。

关于COPY命令如何进行的一个观察结果是:输入命令后,它开始以每秒约10,000行的速度开始写入。它以这种速度维持,直到插入了约80,000行。然后有大约30秒的暂停,此后它又消耗了70,000到90,000行,又暂停了30秒,依此类推,直到它完成了CSV中的所有行或中途因错误而失败或只是挂起。

我需要扎根。我真的希望发现自己在做一些愚蠢的事情,这不是我必须接受并解决的问题。

我正在使用Cassandra 2.2.3

Wil*_*ill 5

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

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

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


小智 4

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