Apache Arrow简介
作者:Anais Dotis-Georgiou / 用例,开发者
2023年9月15日
导航到
本文最初发布在The New Stack上,经授权在此重发。
了解Arrow是什么,其优势以及一些公司和项目如何使用它。
在过去的几十年中,使用大数据集需要企业进行越来越复杂的分析。查询性能、分析和数据存储的进步很大程度上是由于对内存的更高访问。需求、制造工艺改进和技术进步都促进了内存成本的降低。
较低的内存成本催生了支持内存查询处理的技术,这些技术适用于OLAP(在线分析处理)和数据仓库系统。OLAP是任何在大量数据上执行快速多维分析的软件。
一个体现这些技术的项目是Apache Arrow。在本文中,您将了解Arrow是什么,它的优势以及一些公司和项目如何使用Arrow。
什么是Apache Arrow?
Apache Arrow是一个定义内存中列式数据的框架,每个处理引擎都可以使用它。它旨在成为列式内存表示的无语言标准,以促进互操作性。几个来自与Impala、Spark和Calcite一起工作的公司的开源领导者共同开发了它。其中合作者包括Pandas的创造者Wes McKinney,Pandas是一个流行的Python库,用于数据分析。他想让Pandas与数据处理系统互操作,这是Arrow解决的问题。
Apache Arrow技术分解
Apache Arrow因其高效的列式内存交换而得到广泛应用。它提供了零拷贝读取(CPU不需要将数据从一个内存区域复制到第二个区域),这减少了内存需求和CPU周期。
列式存储的优势
由于Arrow具有基于列的格式,处理和操作数据也更快。想象一下,我们将以下数据写入数据存储
然而,引擎以如下列式格式存储数据
换句话说,Arrow内存缓冲区是按列而不是按行分组数据的。以列格式存储数据允许数据库将类似数据分组在一起,以实现更有效的压缩。具体来说,Apache Arrow定义了一种进程间通信机制,用于传输一组Arrow列数组(称为“记录批次”),如本FAQ中所述。
Apache Arrow的开发者将Arrow设计为适用于现代CPU和GPU,因此它可以并行处理数据,并利用单指令/多数据(SIMD)、向量化和向量查询等技术。
存储标准化的优势
Arrow旨在成为数据库和语言的标准化数据格式。标准化数据格式消除了昂贵的序列化和反序列化操作。任何支持Arrow的系统都可以以很小的开销在这些系统之间传输数据,尤其是在Apache Arrow Flight SQL的帮助下(关于这一点稍后会有更多介绍)。
多语言支持的优势
Arrow项目包含库,使得在许多语言中(包括:C++、C#、Go、Java、JavaScript、Julia、Rust、C (GLib)、MATLAB、Python、R 和 Ruby)使用Arrow列格式变得更加容易。这些库使开发者能够在不自己实现Arrow列格式的情况下,与Arrow格式进行工作。
Apache Arrow Flight SQL是什么?
Apache Arrow的另一个好处是它与Apache Arrow Flight SQL的集成。拥有高效的内存数据表示对于减少内存需求以及CPU和GPU负载很重要。然而,如果没有能力高效地在网络服务之间传输这些数据,Apache Arrow可能就不会那么吸引人了。幸运的是,Apache Arrow Flight SQL解决了这个问题。《Apache Arrow Flight SQL》是Apache Arrow社区开发的“一种新客户端/服务器协议,用于与SQL数据库交互,该协议利用了Arrow内存列格式和Flight RPC框架。” Apache Arrow Flight SQL。
背景
为了理解Arrow和Arrow Flight SQL的好处,了解其前身是很有帮助的。ODBC(开放数据库连接)和JDBC(Java数据库连接)是用于访问数据库的API。可以将JDBC视为ODBC的Java版本,而ODBC是基于C的。这些API提供了一套标准的数据库交互方法。它们定义了如何制定SQL查询,如何处理结果,错误处理等。具体来说,JDBC和ODBC几十年来一直被用于以下任务:
- 执行查询
- 创建预处理语句
- 获取支持的SQL方言的元数据
- 可用类型
然而,它们没有定义线格式。线格式指的是数据在网络中传输时的结构化或序列化方式。例如,JSON、XML和Protobuf,数据库驱动程序必须定义这些。
Arrow Flight SQL的优势
幸运的是,数据库开发者不需要使用Arrow Flight SQL定义线协议。相反,他们只需使用Arrow列格式。ODBC和JDBC使用基于行的格式,对于基于列的格式(如Arrow)来说不够用。Arrow消除了使用基于行的API进行数据转置的需要。它还使客户端能够与Arrow原生数据库通信,而无需数据转换或昂贵的序列化和反序列化。
Arrow Flight SQL 还提供了开箱即用的加密和认证功能,进一步减少了开发工作量。这主要归功于建立在 gRPC 之上的 Flight RPC 框架。最后,Arrow Flight SQL 还支持进一步的优化,例如并行数据访问。并行数据访问指的是这些系统将涉及读取或写入大量数据的任务划分为可以同时执行的小子任务的能力。数据可能分布在多个磁盘、节点或数据库分区上,单个查询或操作可以同时访问多个分区,从而大大提高性能。
使用 Apache Arrow 的公司和项目
Apache Arrow 激活了各种数据分析和存储解决方案项目,包括以下内容
- Apache Spark 是一个大规模并行处理数据引擎,它使用 Arrow 将 Pandas DataFrame 转换为 Spark DataFrame。这使得数据科学家能够将针对小数据集开发的验证性模型迁移到大数据集。
- Apache Parquet 是一种非常高效的列式存储格式。Parquet 使用 Arrow 进行向量化读取。向量化读取器通过批量处理列式格式中的多行,使列式存储更加高效。
- InfluxDB 是一个时间序列数据平台。其新的存储引擎使用 Arrow 支持近乎无限的基数用例,支持多种查询语言(包括 InfluxQL 和 SQL 以及更多),并提供与商业智能和数据分析工具的互操作性。
- Pandas 是一个建立在 Python 之上的数据分析工具包。Pandas 使用 Arrow 提供对 Parquet 的读写支持。
使用一个工具集或成为具有庞大且运行良好的社区的一部分,对技术的采用者来说是一个巨大的好处。跨组织协作导致问题解决时间更快,激发创新并促进互操作性。
推荐资源
Apache Arrow 是一个列式格式框架,它可以减少内存和 CPU 负载。它还借助 Apache Arrow Flight SQL 实现更快的数据传输。
要在 InfluxDB 的上下文中利用 Apache Arrow,请在此处注册 这里。如果您想联系为 Apache 生态系统贡献了大量工作的 InfluxDB 3.0 开发者,请加入 InfluxData Community Slack 并查找 #influxdb_iox 频道。