0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

星星科技指导员 来源:NVIDIA 作者:NVIDIA 2022-04-17 10:33 次阅读

在上一篇文章中,我谈到了我们寻找将 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 级的学生。他热衷于计算机、软件和认知科学,在业余时间,他喜欢阅读、研究语言学和玩他的猫。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • NVIDIA
    +关注

    关注

    14

    文章

    4588

    浏览量

    101702
  • gpu
    gpu
    +关注

    关注

    27

    文章

    4415

    浏览量

    126665
  • 计算机
    +关注

    关注

    19

    文章

    6646

    浏览量

    84490
收藏 人收藏

    评论

    相关推荐

    如何将算得的数据(10进制)转换为16进制通过串口发送出?

    我用公式节点算得一组数据,好比是1212,1313,1414等,这些数据转为16进制就是04BC,0521,0586,如何将十进制的数据转换为
    发表于 01-30 14:05

    如何将二维数组转换为图像

    如何将二维数组转换为图像
    发表于 03-10 11:15

    求教如何将Labview的程序转换为C语言啊

    求教如何将Labview的程序转换为C语言啊,申请软件著作权要用
    发表于 12-24 13:04

    如何将秒数转换为时间字符串?

    请问如何将数值型秒数转换为时间字符串?比如3600s转换为01:00:00
    发表于 03-30 13:15

    怎么BYTE格式数据转换为ASCii格式数据

    您好我正在编写一个labview程序,可以通过局域网获取波形数据。它的工作原理但唯一的问题是,当在ascii上设置波形格式时,它会非常慢。所以我试图在字节上设置格式,但现在我需要将有符号的8位整数
    发表于 01-21 16:22

    如何将ADC代码转换为电压

    (LSB)。公式1是可用于任何ADC的一般公式。如果ADC的输出代码为二进制或二进制补码格式也没有关系,只要将二进制数正确转换为其等效十进制值即可。确定LSB大小完成ADC转换后,
    发表于 07-23 04:45

    如何将excel格式的文件转换为可以使用agilent intuilink波形编辑器查看的格式

    嗨,请问有谁知道如何将excel格式的文件转换为可以使用agilent intuilink波形编辑器查看的格式?我已附加文件我试图上传... 以上来自于谷歌翻译 以下为原文Hi,pl
    发表于 08-06 14:38

    如何将System.DateTime转换为VEE时间?

    寻找有关如何将System.DateTime转换为VEE时间(~63G)的任何想法?我知道很多方法可以VEE时间和System.DateTime转换为替代
    发表于 08-06 14:40

    如何将传统ANN转换为SNN?

    SNN和ANN的区别是什么?如何将传统ANN转换为SNN?
    发表于 09-28 06:15

    请教大神LSM6DSM是如何将寄存器数据转换为C度的?

    请教大神LSM6DSM是如何将寄存器数据转换为C度的?
    发表于 12-12 07:44

    如何将PCM值转换为.wav格式

    我的第二个问题仍然是如何将此 PCM 值转换为 .wav 格式?我仍然需要对该领域有更深入的了解,这里的任何人都可以发表建议、链接技术文章并分享他们的经验以供我学习,我将不胜感激。
    发表于 01-06 07:35

    LM5066如何将数据转换为负温度?

    晶体管 MMBT3904LT1G 的集电极和基极连接到 lm5066 的二极管引脚。发射器接地。电路板被放置在 -20 摄氏度的热室中。在读取本地温度寄存器 0x​​8Dh 时,我们收到的数据为 0xF0Ah。如何将数据
    发表于 05-11 07:54

    如何将电阻转换为颜色?

    我创建了一个电阻程序来计算颜色的电阻,但我不确定如何将电阻转换为颜色。你能帮我把这个放在一起吗? 例如,如果我输入 100 欧姆和 5% 的公差,则会出现棕色、黑色、棕色和金色。
    发表于 05-12 08:57

    如何将PROTEL格式的文件转换为AUTOCAD格式并打印

     怎样将PROTEL格式的文件转换为AUTOCAD格式并打印呢: 在国内Protel软件一直大受欢迎,从DOS时代的Protel3.3(Autotrax 1.61)到现在具有EDA Client/Server (客户/服务器)即
    发表于 03-25 15:01 0次下载

    深入RAPIDS了解处理Cassandra数据的方法

      在这篇文章中,我们探索了一种处理 Cassandra SSTables 的尖端方法,方法是使用 RAPIDS 生态系统中的工具将它们直接解析到 GPU 设备内存中。这将使用户能够以更少的初始设置更快地到达见解 ,并且还可以方便地 MIG 评估用 Python 编写的现
    的头像 发表于 04-17 10:38 1004次阅读
    深入<b class='flag-5'>RAPIDS</b>了解处理<b class='flag-5'>Cassandra</b><b class='flag-5'>数据</b>的方法