我在系统上安装了Cassandra 1.1.2作为单节点群集,并且有三个键空间:hotel
,student
和employee
。我希望尽可能转储hotel
的键空间模式及其列族数据,并在其他Cassandra集群上恢复转储。任何人都可以详细建议我该怎么做?
答案 0 :(得分:6)
您可以使用sstable2json
和json2sstable
cassandra工具
同时查看数据共享documentation和this
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内部将设法传输数据和模式信息
答案 1 :(得分:2)
我不建议使用stable2json
和json2sstable
来加载大量数据。它使用jackson API创建数据集并将其转换为json格式。它意味着加载内存中的所有数据以创建唯一的json表示。
对于少量数据是可以的,现在想象加载超过4000万行的大型数据集,大约25GB的数据,这些工具根本不能很好地工作。我已经在没有澄清的情况下向datastax人询问了这个问题。
如果是大型数据集,只需将cassandra数据文件从群集复制到另一个群集即可解决问题。在我的情况下,我正在尝试从Cassandra 1.0.6群集迁移到1.2.1,这些版本之间的数据文件不兼容。
解决方案是什么? 我只是编写自己的导出/导入工具来解决这个问题。我希望尽快发布此工具的链接。