2014-07-22 30 views
16

我使用Cassandra 2.0.9来存储相当大量的数据,比如100Gb,在一个列系列中。我想快速将这些数据导出为CSV。我想:从Cassandra导出大量的数据到CSV

  • sstable2json - 它会产生相当大的JSON文件,这是很难解析 - 因为工具放入一行数据,并使用复杂的架构,它需要(例如300MB的数据文件=〜2Gb的JSON)。大量的时间来转储和卡桑德拉喜欢根据其内部机制来更改源文件名
  • COPY - 导致对大数量的记录
  • CAPTURE相当快的EC2实例超时 - 像上面,导致超时
  • 与分页读 - 我用timeuuid它,但它返回约1,5k记录每秒

我使用Amazon EC2实例具有快速存储,内存15 GB和4个核

是有没有更好的选择将Cassandra的数据从千兆字节输出到CSV?

+0

你有没有考虑过为自己制作一个小玩意儿?使用datastax驱动程序,您可以轻松地提出请求,提取您的数据,然后使用csv文件将它们序列化为几乎没有Java代码? 这将确保你得到你想要的确切结果(尽管有一点努力)。 – Ar3s

+0

此外,我没有得到“阅读与分页”方法或问题。 – Ar3s

+1

*阅读与分页* - 使用Python驱动程序我试图阅读内容使用限制(测试值100 - 10000,基于TimeUuid)和偏移量,它非常缓慢,卡桑德拉能够读取每秒约1,5k记录3个实例和复制因子2 我无法想象,只需使用驱动程序就可以构建快速读取,因为每行Cassandra必须检查存储数据的节点。 – KrzysztofZalasa

回答

3

因为使用COPY在试图从Cassandra中导出数百万行的表时非常具有挑战性,所以我所做的就是创建一个简单的工具从cassandra表中获取数据块(分页)将其导出为CSV。使用来自datastax的java库查看我的example solution

+0

请提供一个完整的答案,而不仅仅是一个链接 – slfan

+0

正如我之前写的:我试过这个解决方案,但速度很慢 - 它可能每秒传递1,5k条记录。你有任何副本集和100Gb数据的基准吗? – KrzysztofZalasa

+0

我们的数据集中最大的表格是:22gb数据〜122mil行〜在444m38.061s中提取。 (使用1个主机cassandra服务器4core 8gb ram sata hdd)(大约4.5k行/秒,这对我们来说已经足够了,因为我们只会将数据迁移到其他地方) –