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