【问题标题】:Keyspace schema import and export in CassandraCassandra 中的键空间模式导入和导出
【发布时间】:2012-07-25 19:13:33
【问题描述】:

我的系统上安装了 Cassandra 1.1.2 作为单节点集群,并具有三个键空间:hotelstudentemployee。如果可能,我想转储 hotel 的键空间模式及其列族数据,并在其他 Cassandra 集群上恢复转储。有人可以详细建议我该怎么做吗?

【问题讨论】:

    标签: java cassandra


    【解决方案1】:

    您可以使用sstable2jsonjson2sstable cassandra 工具

    查看 Datastax documentationthis 也是

    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 在内部将设法流式传输数据和架构信息

    【讨论】:

    • thanks tamil 非常感谢,我从 3 天开始就一直面临这个问题,这是一个很好的解决方案,在获取密钥空间并将其恢复到其他集群后,我有一件事要问我可以复制和粘贴密钥空间吗数据目录中存在的数据
    • 不,你不能那样做。在现有的一个节点集群上执行nodetool drain [如果您希望所有数据甚至在内存中] 并继续使用 json 加载器。没有别的去。 nodetool drain 将刷新所有 CF,但在此操作完成之前,您当前的集群将无法访问。
    • 谢谢,但我做了我上面提到的,它工作正常,如果我不使用节点排水等会产生任何问题
    • 我不是 100% 确定。但这不是推荐的方式。希望你没有看到一些不一致的地方。仔细监控您的 cassandra 日志。
    • 记得在使用 sstable2json 命令之前将 sstables 刷新到磁盘:nodetool flush keyspace cfname
    【解决方案2】:

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

    少量数据还可以,现在想象一下要加载超过 4000 万行的大型数据集,大约 25GB 的数据,这些工具根本无法正常工作。我已经问过 datastax 的人了,没有澄清。

    对于大型数据集,只需将 cassandra 数据文件从一个集群复制到另一个集群即可解决问题。在我的例子中,我试图从 Cassandra 1.0.6 集群迁移到 1.2.1,数据文件在这个版本之间不兼容。

    解决办法是什么? 我只是在编写自己的导出/导入工具来解决这个问题。我希望尽快发布此工具的链接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-02
      • 1970-01-01
      • 2018-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-21
      相关资源
      最近更新 更多