人工智能/深度学习

使用 GPU 分析 Cassandra 数据,第 2 部分

编者按:观看使用 GPU s 分析卡桑德拉数据研讨会。

在上一篇文章中,我谈到了我们寻找将 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 类型counterfrozen和用户定义的类型。
  • 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 版本访问。

我们将举办一个免费的在线研讨会,将在 8 月中旬通过实际操作的例子深入到这个项目中!如果您感兴趣,可以注册here

如果您有兴趣尝试sstable-to-arrow,,请查看本系列分为两部分的第二篇博文,如果有任何反馈或问题,请随时联系seb@datastax.com

 

Tags