2012-07-27 105 views
6

我有我的系统为单节点集群上的卡桑德拉1.1.2安装有三个keyspaces:hotelstudentemployee。如果可能,我想转储hotel的密钥空间模式及其列数据,并在其他Cassandra集群上恢复转储。任何人都可以详细告诉我,我该怎么做?KEYSPACE模式导入和导出在卡桑德拉

回答

6

您可以使用sstable2jsonjson2sstable卡桑德拉工具

退房Datastax documentation在同和this

Usage: sstable2json [-f outfile] <sstable> [-k key [-k key [...]]] 
Usage: json2sstable -K keyspace -c column_family <json> <sstable> 

您随时可以在文件

cassandra-cli -h HOST -p PORT -f fileName 

执行卡桑德拉 - CLI命令您可以将所有创建语句加载到文件中并执行此命令

要获得CLI脚本来创建keyspaces和列家庭使用以下命令卡桑德拉-CLI界面

show schema 

但柜面你想创建两个节点的集群。你不需要做所有上述事情。只需以不同的令牌范围和相同的群集名称启动另一个节点即可。 Cassandra内部将设法传输数据和模式信息

+0

感谢泰米尔非常感谢你我一直面临这个问题从3天这是一个很好的解决方案 我有一件事要问geting密钥空间后恢复它在其他群集可以复制和粘贴的密钥空间数据进入数据目录 – 2012-07-27 09:32:43

+0

不,你不能这样做。在现有的一个节点集群上执行'nodetool drain' [即使您想要所有数据,甚至在内存中]并继续使用json加载程序。别无他法。 nodetool drain会刷新所有的CF,但是当前的集群将无法访问,直到此操作完成。 – Tamil 2012-07-27 10:35:37

+0

谢谢,但我做了我上面提到的,它工作正常,它会创建任何问题,如果我不会使用节点排水等 – 2012-07-27 19:39:14

2

我不建议使用stable2jsonjson2sstable加载大量数据。它使用jackson API来创建数据集并将其转换为json格式。它意味着加载内存中的所有数据来创建一个独特的json表示。

对于少量的数据可以,现在想象加载一个包含超过4000万行数据,大约25GB数据的大型数据集,这些工具根本无法正常工作。我已经向datastax提问,但没有澄清。

如果数据集较大,只需将cassandra数据文件从群集复制到另一个群集即可解决问题。在我的情况下,我试图从Cassandra 1.0.6集群迁移到1.2.1,这些版本之间的数据文件不兼容。

解决方案是什么? 我只是写我自己的出口/进口工具来解决这个问题。我希望很快发布此工具的链接。