Apache Arrow简介
作者 Anais Dotis-Georgiou / 产品
2023年1月9日
导航至
了解Apache Arrow是什么,它是如何工作的,以及一些将其作为架构中关键组件的公司。
在过去几十年中,利用大数据集需要企业执行越来越复杂的分析。查询性能、分析和数据存储的进步在很大程度上是得益于对内存的更大访问。需求、制造流程改进以及技术进步都促成了内存成本的降低。更低的内存成本推动了支持内存查询处理OLAP(在线分析处理)和数据仓库系统的技术创造。OLAP是任何在大量数据上执行快速多维分析软件。
以下项目是这些技术的代表之一:Apache Arrow。在本文中,您将了解Arrow是什么,它的优势,以及一些公司和项目如何使用Arrow。
什么是Apache Arrow?
Apache Arrow是一个定义内存中列式数据的框架,每个处理引擎都可以使用它。它的目标是成为列式内存表示的语言无关标准,以促进互操作性。来自Impala、Spark和Calcite等公司的开源领导者共同开发了它。共同创造者中包括Pandas的创造者Wes McKinney。他希望使Pandas与数据处理系统互操作,这正是Arrow解决的问题。
Apache Arrow技术分解
Apache Arrow因其提供的有效列式内存交换而得到广泛应用。它提供了零拷贝读取(CPU不会将数据从一个内存区域复制到另一个内存区域),这减少了内存需求和CPU周期。
由于Arrow具有基于列的格式,因此处理和操作数据也更快(更多内容将在后面的部分中介绍)。它的构建者将Arrow设计用于现代CPU和GPU,以便它可以并行处理数据并利用单指令/多数据(SIMD)、向量化和向量查询等技术。
使用Apache Arrow的公司和项目
Apache Arrow驱动了各种数据分析和存储解决方案的项目,包括
-
Apache Spark是一个大规模、并行处理的数据引擎,它使用Arrow将Pandas DataFrame转换为Spark DataFrame。这使得数据科学家可以将在小数据集上开发的POC模型移植到大数据集。
-
Apache Parquet是一种非常高效的列式存储格式。Parquet使用Arrow进行向量读取。向量读取器通过将多行批量化为列式格式,使列式存储更加高效。
-
InfluxDB是一个时间序列数据平台。新的存储引擎使用Arrow来支持几乎无限的基数或维度用例,查询多种查询语言(包括Flux、InfluxQL、SQL等),并提供与BI和数据分析工具的互操作性。
-
Pandas是建立在Python之上的数据分析工具包。Pandas使用Arrow提供对Parquet的读写支持。
Apache Arrow和InfluxDB
InfluxData最近宣布推出基于Apache生态系统构建的新存储引擎。具体来说,开发者在Apache Arrow、Apache DataFusion和Apache Parquet之上用Rust编写了新引擎。Apache Arrow通过提供有效的列式数据交换,帮助InfluxDB实现几乎无限的基数或维度用例。想象一下,我们将以下数据写入InfluxDB:
Name: measurement1 | |||||
field1 | field2 | tag1 | tag2 | tag3 | time |
1i | null | tagvalue1 | null | null | timestamp1 |
2i | null | tagvalue2 | null | null | timestamp2 |
3i | null | null | tagvalue3 | null | timestamp3 |
4i | true | tagvalue1 | tagvalue3 | tagvalue4 | timestamp4 |
1i | null | null | null | null | timestamp5 |
然而,该引擎以如下列式格式存储数据
1i | 2i | 3i | 4i | 1i |
null | null | null | true | null |
tagvalue1 | tagvalue2 | null | tagvalue1 | null |
null | null | tagvalue3 | tagvalue3 | null |
null | null | null | tagvalue4 | null |
timestamp1 | timestamp2 | timestamp3 | timestamp4 | timestamp5 |
或者换句话说,它以如下方式存储数据
1i, 2i, 3i, 4i, 1i;
null, null, null, true, null;
tagvalue1, tagvalue2, null, tagvalue1, null;
null, null, null, tagvalue3, tagvalue3, null;
null, null, null, tagvalue4, null;
timestamp1, timestamp2, timestamp3, timestamp4, timestamp5.
以列式格式存储数据允许数据库将类似数据分组在一起以进行低成本压缩。具体来说,“Apache Arrow定义了一个进程间通信(IPC)机制来传输一组Arrow列式数组(称为“记录批次”),如本常见问题解答中所述。此外,时间序列数据是独特的,因为它通常有两个相关变量。时间序列的值依赖于时间,并且值与之前的时间序列值有一定的相关性。时间序列的这一属性意味着InfluxDB可以通过字典编码在记录批次压缩方面发挥更大的作用。字典编码允许InfluxDB消除存储重复值,这在时间序列数据中很常见。它还使得能够使用SIMD指令进行矢量化查询指令。
对Apache Arrow的贡献和对开源的承诺
除了InfluxDB Cloud的免费层外,InfluxData在MIT许可下提供InfluxDB的开源版本。开源产品为社区提供了在代码之上构建自己解决方案的自由,以及演进代码的能力,这创造了实际影响的机会。当聪明的人能够访问到好的工具时,他们就会创造出有影响力的解决方案。然而,开源的真正力量在于开发者不仅提供开源代码,还向流行项目做出贡献。跨组织合作产生了像TensorFlow、Kubernetes、Ansible或Flutter等一些最受欢迎的开源项目。InfluxDB的存储工程师为Apache Arrow做出了大量贡献。
InfluxDB IOx团队管理着https://crates.io/crates/arrow和https://crates.io/crates/parquet的每周发布。他们还帮助撰写并支持DataFusion博客文章,如:Apache Arrow DataFusion项目更新和2022年6月Apache Arrow和Parquet 16.0.0亮点。
对Arrow的其他贡献包括
-
快速、内存高效的排序(以及关于它的博客),其他实现已经采用了这项技术。
- 所有级别的性能提升。
- 使Arrow crate默认安全并添加额外的错误检查。
结论
要利用新InfluxDB存储引擎的所有优势,请在此注册。
如果您想联系InfluxDB引擎的开发者,请加入InfluxData社区Slack并查找#influxdb_iox频道。
请查看以下内容以了解有关新存储引擎的更多信息
我希望这篇博客文章能激发您探索InfluxDB Cloud的热情。如果您需要任何帮助,请通过我们的社区网站或Slack频道联系我们。我很乐意了解您想实现的目标以及您希望在InfluxDB的任务系统中拥有的功能。
最后,如果您正在InfluxDB之上开发酷炫的物联网应用程序,我们很乐意了解它,请确保使用#InfluxDB在社交媒体上分享!
请随时通过我们的社区Slack频道直接联系我,分享您的想法、关注点或问题。我很乐意收到您的反馈并帮助您解决遇到的问题!或者 分享您的经历 并获得免费InfluxDB卫衣。