【问题标题】:What is the best way to export all of my data from a Cassandra Cluster?从 Cassandra 集群导出所有数据的最佳方式是什么?
【发布时间】:2019-10-16 13:36:13
【问题描述】:

我对 Cassandra 很陌生,如果能提供任何帮助,我将不胜感激。我有一个包含 6 个节点的集群,跨越 2 个数据中心(每个集群 3 个节点)。我的客户已经决定他们不想再用 Datastax 更新他们的 Cassandra 许可证,并且希望他们的数据导出为将来可以轻松导入另一个数据库的格式。我正在考虑将数据导出为 CSV 文件,但由于数据分布在所有节点之间,我不确定导出所有数据的最佳方式是什么。

【问题讨论】:

  • 您想使用COPY command。存在的另一个选项是使用sstabledump 将单个 SSTables 转储为 JSON,由于显而易见的原因,这可能很乏味,但可以并行化并用于大型数据集。

标签: cassandra


【解决方案1】:

一个选项 - 您应该能够使用 CQL COPY 命令 - 将数据复制为 CSV 格式。复制的好处是您可以从单个节点运行它(即它不是“节点”级别的工具)。命令将是(一次在 cqlsh 中):

CQL> 复制。到'/path/to/file'

如果有大量数据或大量表格,则此工具可能不太适合。但是对于少数没有大量行数(

-吉姆

【讨论】:

  • 如果我没有指定命名空间和表,这对 cqlsh 5.0.1 不起作用:“copy . to '/tmp/snapshot';”发出错误“不正确的复制命令”。
【解决方案2】:

自 2018 年起,您可以将 DSBulk 与 DSE 结合使用,将数据导出到/从 CSV(默认情况下)或 JSON 中导入。从 2019 年底开始,它也可以与开源 Cassandra 一起使用。

可以这么简单:

dsbulk unload -k keyspace -t table -u user -p password -url filename

DSBulk 已针对快速数据导出进行了高度优化,不会像运行 select * from table 时那样在协调器节点上施加过多负载。

您可以控制要导出哪些列,甚至可以提供自己的查询等。DataStax 博客有一系列关于使用 DSBulk 不同方面的博文:

  1. Introduction and Loading
  2. More Loading
  3. Common Settings
  4. Unloading
  5. Counting
  6. Examples for Loading From Other Locations

【讨论】:

    【解决方案3】:

    您可以使用 CQL COPY 命令从 Cassandra 集群中导出数据。但是,如果您有大量数据,它对于小数据集是有效的,这个命令没有用,因为它会给出一些错误或超时问题。此外,您可以使用 sstabledump 并将您的节点日期导出为 JSON 格式。希望对你有用。

    【讨论】:

      【解决方案4】:

      我为此目的实现了小脚本。这不是最好的方法,因为它速度很慢,并且根据我的经验,它会在系统表上产生连接错误。但它对于在小型数据集上检查 Cassandra 可能很有用:https://github.com/kirillt/cassandra-utils

      【讨论】:

      • COPY 不可扩展,并且已经有其他更可扩展的工具...
      • 是的,我知道并在回答中提到了这一点 :) 就我个人而言,我只需要 CSV 文件来检查数据库状态,否则我会使用 Medusa。我还没有尝试过dsbulk,如果它易于使用,那么即使达到我的目标也更好。
      • 它易于使用且经过大量优化
      猜你喜欢
      • 2017-10-19
      • 2013-06-27
      • 2015-10-04
      • 2020-04-30
      • 1970-01-01
      • 2015-08-16
      • 2012-03-04
      • 2016-02-28
      • 1970-01-01
      相关资源
      最近更新 更多