将20Gb csv文件复制到cassandra的最佳方法

时间:2016-05-31 13:18:41

标签: apache-spark cassandra sqoop flume cqlsh

我有一个巨大的20Gb csv文件要复制到cassandra中,当然我需要管理错误的情况(如果服务器或传输/加载应用程序崩溃)。

我需要重新启动处理(或者是否是其他节点)并继续传输而不启动它的csv文件。

最好和最简单的方法是什么?

使用Copy CQLSH命令?使用水槽或sqoop?或使用本机java应用程序,使用spark ...?

非常感谢

3 个答案:

答案 0 :(得分:2)

如果是我,我会分割文件。

我会选择加载任何csv数据的首选方法,忽略巨大文件大小和错误处理的问题。例如,我将使用python脚本和本机驱动程序,并使用几行csv对其进行测试,以确定它可以从具有真实数据的微小csv文件中插入。

然后我会写一个脚本将文件拆分成可管理的大小块,但是你定义它。我会尝试一些块大小来获得大约一分钟加载的文件大小。也许你需要数百个20 GB的块,但可能不需要数千个。

然后我会将整个文件拆分成这个大小的块并循环遍历块,记录它的运行方式。在任何类型的错误上,修复问题,然后从日志文件中找到的最后一个成功加载的块开始重新加载。

答案 1 :(得分:2)

以下是我首先尝试的两个注意事项,因为它们很简单且包含得很好:

  1. cqlsh COPY在2.1.13,2.2.5,3.0.3和3.2+中已vastly improved。如果您考虑使用它,请确保使用其中一个版本或更新版本。
  2. 另一种选择是使用Brian Hess' cassandra-loader这是以有效的方式批量加载到csv文件和从csv文件加载的有效方法。

答案 2 :(得分:0)

我认为CQLSH无法处理应用程序崩溃的情况,那么为什么不使用上面公开的两个解决方案,将文件拆分成几个可管理的块并使用copy cqlsh命令导入数据?