从大型 Cassandra 表导出数据

问题描述 投票:0回答:1

我有一个 Cassandra 表(包含历史数据),大约 5TB 或更多。为了优化基础设施成本,我需要将旧数据卸载到 S3。我正在查看

dsbulk unload
,它针对导出进行了优化,但不确定它是否能够处理如此大的体积。还有另一个选项可以编写自定义应用程序,该应用程序查询 3 年以上的数据并创建 CSV/Parquet 并上传到 S3。在这种情况下,现有数据模型需要数十亿次查询。

CREATE TABLE ingestion.alerts (
    uuid uuid PRIMARY KEY,
    payload text,
    inc_id bigint,
    group_id bigint,
    timestamp timestamp
)

CREATE TABLE ingestion.alerts_by_day (
    group_id bigint,
    date text,
    timestamp timestamp,
    uuid uuid,
    PRIMARY KEY ((group_id, date), timestamp)
)

group_id 不到 2000 个,每个组有 2000 天的数据。查询

ingestion.alerts_by_day
400 万次并不是什么大问题。我必须使用
ingestion.alerts_by_day
group_id
查询
date
,这为我提供当天的所有警报 UUID,并且我需要从
ingestion.alerts
查询单个警报。一组可能一天内有 10 万到 100 万个警报,即来自
ingestion.alerts
的最多 100 万次读取。无法更新数据模型,因为集群没有足够的空间来创建另一个表,并且新节点需要很高的价格。

另一个有趣的选择是将 Spark 与 cassandra-connector 一起使用,但问题仍然相同:它能够扫描整个表以创建导出吗?这可能会给 Cassandra 集群造成高压。当然,一旦我们第一次迁移较旧的数据,数据量就会急剧减少,可能只有原始大小的 25%。

当我将数据上传到S3时,我将以多个文件的形式上传。我需要为每个组每天创建文件:alert-ingestion-group_id-ddmmyy。也许我会为每个组创建存储桶,以便它包含一组的数据,并方便以后搜索。

如此大规模的导出需要哪些工具/框架/库?我正在为 Cassandra 集群 5.1 使用 datastax enterprise,其中包含 Cassandra 3.11。如果价格合理,我愿意接受付费服务。

amazon-s3 cassandra datastax-enterprise cassandra-3.0 dse
1个回答
0
投票

作为 Datastax 企业客户,请随时通过票证获得支持并寻求指导。

DSBulk 绝对是一个选择:

  • 定义将导出数据的 CQL 查询(如果您只想查询旧数据)
  • 提供检查点,停止时可以返回剩下的地方
  • 可以精确设置集群上的线程、线程池和负载。它也是(显然?)令牌感知的,并将处理令牌范围查询的工作。

https://github.com/datastax/dsbulk/blob/1.x/manual/settings.md

© www.soinside.com 2019 - 2024. All rights reserved.