【发布时间】:2012-07-25 19:13:33
【问题描述】:
我的系统上安装了 Cassandra 1.1.2 作为单节点集群,并具有三个键空间:hotel、student 和 employee。如果可能,我想转储 hotel 的键空间模式及其列族数据,并在其他 Cassandra 集群上恢复转储。有人可以详细建议我该怎么做吗?
【问题讨论】:
我的系统上安装了 Cassandra 1.1.2 作为单节点集群,并具有三个键空间:hotel、student 和 employee。如果可能,我想转储 hotel 的键空间模式及其列族数据,并在其他 Cassandra 集群上恢复转储。有人可以详细建议我该怎么做吗?
【问题讨论】:
您可以使用sstable2json 和json2sstable cassandra 工具
查看 Datastax 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 在内部将设法流式传输数据和架构信息
【讨论】:
nodetool drain [如果您希望所有数据甚至在内存中] 并继续使用 json 加载器。没有别的去。 nodetool drain 将刷新所有 CF,但在此操作完成之前,您当前的集群将无法访问。
nodetool flush keyspace cfname
我不建议使用stable2json 和json2sstable 来加载大量数据。它使用 jackson API 创建数据集并将其转换为 json 格式。它意味着将所有数据加载到内存中以创建唯一的 json 表示。
少量数据还可以,现在想象一下要加载超过 4000 万行的大型数据集,大约 25GB 的数据,这些工具根本无法正常工作。我已经问过 datastax 的人了,没有澄清。
对于大型数据集,只需将 cassandra 数据文件从一个集群复制到另一个集群即可解决问题。在我的例子中,我试图从 Cassandra 1.0.6 集群迁移到 1.2.1,数据文件在这个版本之间不兼容。
解决办法是什么? 我只是在编写自己的导出/导入工具来解决这个问题。我希望尽快发布此工具的链接。
【讨论】: