在上一篇文章中,我谈到了我们寻找将 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。
这将侦听端口 9143 上的连接。它希望客户端先发送消息,然后以以下格式发送数据:
作为 8 字节 big-endian 无符号整数传输的箭头表数
对于每个表:
其大小(以字节为单位)为 8 字节大端无符号整数。
表的内容采用箭头 IPC 流格式。
然后,您可以使用任何客户端从端口获取数据。要开始使用示例 Python 客户端,如果您的系统不支持 CUDA ,请执行以下步骤:
如果您的系统支持 CUDA ,建议使用以下命令创建 conda 环境。在启动sstable-to-arrow服务器之前,您还需要传递 -x 标志,以将所有不支持 cuDF 的类型转换为十六进制字符串。
要使用其他数据集进行实验,您需要在计算机上使用原始 SSTable 文件。您可以在这是谷歌硬盘文件夹下载物联网数据示例。您还可以使用存储库中的generate-data脚本生成物联网数据,也可以使用 CQL 和 Cassandra Docker 映像手动创建表(有关更多信息,请参阅Cassandra 快速入门)。确保使用 Docker 卷与容器共享 SSTable 文件:
您还可以传递 -h 标志以获取有关其他选项的信息。如果希望从源代码构建项目,请按照GitHub 存储库中的步骤进行操作。
SSTable to Parquet
Sstable-to-arrow还能够将 SSTable 数据保存为Parquet文件,这是存储列数据的常用格式。同样,它还不支持重复数据消除,因此它只需将 sstable 和所有元数据输出到给定的拼花地板文件。
您可以通过传递-p标志,然后传递要存储拼花地板文件的路径来运行此操作:
结论
Sstable-to-arrow是利用 Cassandra 数据进行基于 GPU 的分析的早期但有希望的方法。该项目可在GitHub上获得,并可通过码头中心作为 alpha 版本访问。
关于作者
Alex Cai 于 2021 年在 DataStax 实习,是哈佛大学 2025 级的学生。他热衷于计算机、软件和认知科学,在业余时间,他喜欢阅读、研究语言学和玩他的猫。
审核编辑:郭婷
-
NVIDIA
+关注
关注
14文章
4952浏览量
102859 -
gpu
+关注
关注
28文章
4709浏览量
128776 -
计算机
+关注
关注
19文章
7439浏览量
87781
发布评论请先 登录
相关推荐
评论