Cassandra中的Keyspace模式导入和导出

7

我在我的系统上安装了一个Cassandra 1.1.2单节点集群,并有三个keyspace:hotelstudentemployee。 如果可能的话,我想转储hotel 的keyspace架构以及其列族数据,并将其恢复到其他Cassandra集群中。 有人能详细建议我应该如何做吗?

2个回答

6
您可以使用cassandra工具中的sstable2jsonjson2sstable工具。
请查看Datastax关于这方面的文档,还可以参考此链接
Usage: sstable2json [-f outfile] <sstable> [-k key [-k key [...]]]
Usage: json2sstable -K keyspace -c column_family <json> <sstable>

您总是可以在文件中执行cassandra-cli命令

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

您可以将所有创建语句加载到一个文件中并执行此命令

要获取CLI脚本以创建键空间和列族,请在cassandra-cli接口中使用以下命令

show schema

如果你想创建一个由两个节点组成的集群,不需要做以上所有的工作。只需使用不同的令牌范围和相同的集群名称启动另一个节点即可。Cassandra内部会自动管理数据和模式信息的流传输。


谢谢Tamil,非常感谢。我已经遇到这个问题三天了,这是一个好的解决方案。我有一个问题要问,在获取keyspace并将其恢复到其他集群之后,我能否复制并粘贴存在数据目录中的keyspace数据? - Sunil Kumar
不行,你不能这样做。在现有的单节点集群上执行nodetool drain命令(如果你想要所有数据,即使是在内存中),然后继续使用JSON加载器。别无选择。nodetool drain将刷新所有列族,但在此操作完成之前,你的当前集群将无法访问。 - Tamil
谢谢,但我已经按照上面提到的做了,而且它运行良好。如果我不使用“节点排空”等功能,是否会产生问题? - Sunil Kumar
我不是100%确定。但这不是推荐的方式。希望您没有看到任何不一致之处。请仔细监控您的Cassandra日志。 - Tamil
在使用sstable2json命令之前,请记得将sstables刷新到磁盘:nodetool flush keyspace cfname - Juampa

2
我不建议使用stable2jsonjson2sstable来加载大量数据。它使用jackson API创建数据集并将其转换为json格式。这意味着要加载所有数据到内存中创建唯一的json表示形式。
对于少量数据而言,这是可以的,但是想象一下加载超过4000万行、约25GB数据的大型数据集,这些工具根本无法正常工作。我已经向DataStax的人询问了此事,但没有得到明确答复。
在处理大型数据集时,只需将Cassandra数据文件从一个群集复制到另一个群集即可解决问题。在我的情况下,我正在尝试从Cassandra 1.0.6群集迁移到1.2.1,但是这些版本之间的数据文件不兼容。
那么解决方案是什么呢? 我正在编写自己的导出/导入工具来解决这个问题。我希望很快能够发布这个工具的链接。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接