全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 处理器/DSP >

如何将Cassandra数据转换为RAPIDS可用格式

时间:2022-04-17 10:33

人气:

作者:admin

标签: GPU  计算机  NVIDIA 

导读:Sstable-to-arrow是利用 Cassandra 数据进行基于 GPU 的分析的早期但有希望的方法。该项目可在GitHub上获得,并可通过码头中心作为 alpha 版本访问。...

在上一篇文章中,我谈到了我们寻找将 SSTable 数据加载到 GPU 以进行数据分析的最佳方法的过程。我们研究了将 Cassandra 数据转换为RAPIDS可用格式的各种方法,并决定创建sstable to arrow ,一种自定义实现,用于解析 sstable 并将其写入 arrow 格式。在这篇文章中,我们将进一步讨论sstable-to-arrow,它的功能、局限性,以及如何在分析用例中使用它。

实施细节

Sstable-to-arrow是用C++17编写的。它使用 Kaitai 结构。库以反 Clara 方式指定SSTable文件的布局。然后 Kaitai 结构编译器将这些 declarations 编译成C++类,这些类可以包含在源代码中,以将SSTables解析为内存中的数据。然后,它获取数据并将表中的每一列转换为箭头向量。Sstable to arrow随后可以将arrow数据发送到任何客户机,在那里数据可以转换为 cuDF 并可用于 GPU 分析。

当前限制

SStable-to-arrow一次只能读取一个 SSTable 。要处理多个 SSTable ,用户必须为每个 SSTable 配置 cuDF ,并使用 GPU 根据上次写入 wins 语义合并它们。

sstable-to-arrow公开内部卡桑德拉时间戳和墓碑标记,以便可以在 cuDF 层进行合并。

有些数据,包括分区键和集群列的名称,实际上无法从 SSTable 文件中推断出来,因为它们需要将模式存储在系统表中。

Cassandra 在刷新到 SSTables 之前将数据存储在 memtables 和 commitlogs 中,因此仅使用sstable-to-arrow执行的分析可能会过时/不实时。

目前,解析器只支持 Cassandra OSS 3 。 11 编写的文件。

系统设置为扫描整个 SSTables (而不是读取特定分区)。如果我们做谓词下推,还需要做更多的工作。

不支持以下CQL 类型:counter、frozen和用户定义的类型。

varint s 最多只能存储 8 个字节。尝试读取具有较大varint的表将崩溃。

解析器最多只能读取 64 列的表。

解析器将每个 SSTable 加载到内存中,因此当前无法处理超出机器内存容量的大型 SSTable 。

Decimal S转换成8字节浮点值,因为无论是C++还是箭头都没有对 Java BigIntege 或 BigDecimal 类的任意精度整数或小数点的本机支持。这意味着对十进制列的操作将使用浮点运算,这可能是不精确的。

Set 被视为列表,因为 Arrow 没有集合的等效项。

路线图和未来发展

该项目的最终目标是在 RAPIDS 生态系统中包含某种形式的读表功能,类似于cudf.read_csv。性能也是一个不断发展的领域,我目前正在研究如何进一步并行读取 SSK 表,以充分利用 GPU 。我还致力于解决或改进前面提到的限制,特别是扩大对不同 CQL 类型的支持,并使程序能够处理大型数据集。

如何使用sstable-to-arrow

您可以使用Docker运行sstable-to-arrow。

pYYBAGJbfHWAdN7_AABuSCQ4LMo169.png

这将侦听端口 9143 上的连接。它希望客户端先发送消息,然后以以下格式发送数据:

作为 8 字节 big-endian 无符号整数传输的箭头表数

对于每个表:

其大小(以字节为单位)为 8 字节大端无符号整数。

表的内容采用箭头 IPC 流格式。

然后,您可以使用任何客户端从端口获取数据。要开始使用示例 Python 客户端,如果您的系统不支持 CUDA ,请执行以下步骤:

poYBAGJbfHaAK3XnAAF0YG_R6qo311.png

如果您的系统支持 CUDA ,建议使用以下命令创建 conda 环境。在启动sstable-to-arrow服务器之前,您还需要传递 -x 标志,以将所有不支持 cuDF 的类型转换为十六进制字符串。

pYYBAGJbfHiAQWjwAAFNORj9oqc128.png

要使用其他数据集进行实验,您需要在计算机上使用原始 SSTable 文件。您可以在这是谷歌硬盘文件夹下载物联网数据示例。您还可以使用存储库中的generate-data脚本生成物联网数据,也可以使用 CQL 和 Cassandra Docker 映像手动创建表(有关更多信息,请参阅Cassandra 快速入门)。确保使用 Docker 卷与容器共享 SSTable 文件:

pYYBAGJbfHmAbL4rAABRPqoDm3I727.png

您还可以传递 -h 标志以获取有关其他选项的信息。如果希望从源代码构建项目,请按照GitHub 存储库中的步骤进行操作。

SSTable to Parquet

Sstable-to-arrow还能够将 SSTable 数据保存为Parquet文件,这是存储列数据的常用格式。同样,它还不支持重复数据消除,因此它只需将 sstable 和所有元数据输出到给定的拼花地板文件。

您可以通过传递-p标志,然后传递要存储拼花地板文件的路径来运行此操作:

poYBAGJbfHqAQ14BAAB3agOqh4U924.png

结论

Sstable-to-arrow是利用 Cassandra 数据进行基于 GPU 的分析的早期但有希望的方法。该项目可在GitHub上获得,并可通过码头中心作为 alpha 版本访问。

关于作者

Alex Cai 于 2021 年在 DataStax 实习,是哈佛大学 2025 级的学生。他热衷于计算机、软件和认知科学,在业余时间,他喜欢阅读、研究语言学和玩他的猫。

审核编辑:郭婷

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信