本文介绍了最新Alluxio2.2.0版本所提供的结构化数据管理功能,这项新功能旨在优化Alluxio上SQL查询和结构化数据的工作负载。
目 的
如今,许多用户通过在数据分析或AI平台中部署Alluxio以获得统一的数据访问,同时利用数据缓存相关技术以加速数据IO。无论上层使用何种计算框架,Alluxio都可以在“ Alluxio文件系统”逻辑结构中提供对文件、目录和对象的抽象。
但是,诸如Presto,ApacheSpark SQL或Apache Hive之类的广泛使用的分析引擎通常使用的是由“行”和“列”组成的各类“表格”型结构化数据,而不是“偏移”和“长度”来确定的文件或对象。这种结构化的差异给分析过程带来了许多挑战并使效率低下,因为将“表格”和“分区”映射到文件或对象需要额外的处理和数据定位。数据通常以面向存储优化的方式存储,而无法以计算优化方式访问,这可能会对数据访问效率造成负面影响。
例如,数据分析人员在Hive表上运行SQL查询,该表对应成千上万个以CSV格式存储的小文本文件会使得计算效率不高。除此之外,由于数据可能会由过时的服务进行ETL,由另外一个团队进行管理,因此随意更新变换底层原有数据的存储格式往往不切实际。
我们Alluxio的目标是提供物理数据独立性,使得SQL引擎对数据的逻辑访问独立于所存储数据的物理格式。作为计算和存储之间的中间层,Alluxio可以很好地缩短SQL引擎与文件系统或基于对象的存储系统之间的距离,从而实现物理数据独立性。
什么是Alluxio结构化数据管理
Alluxio结构化数据管理是一组可使结构化数据应用程序更有效地与数据进行交互的新服务。Alluxio结构化数据管理借助结构化数据管理,可以更高效地展现被SQL引擎访问的数据,而与数据的存储方式和存储位置无关。
Alluxio结构化数据管理功能与发展方向的主要有两点:
-
提供专门用于SQL引擎如何与数据交互的结构化数据API。这将引入与结构化数据概念(例如表,模式,行和列)相关的新API。
-
缓存逻辑数据访问,其重点是缓存SQL引擎所需的内容。换句话说,Alluxio将缓存能使计算优化的数据。
为了实现这些目标,Alluxio结构化数据管理需要实现下列关键条件:
-
结构化数据客户端:客户端是SQL引擎与Alluxio结构化数据管理的各个组件进行交互的途径。
-
结构化数据缓存和元数据:此组件存储和缓存用于SQL引擎计算优化的数据,并管理缓存数据的元数据。这使Alluxio能够感知数据的结构,从而进行模式感知优化。
-
转换服务:转换服务负责将现有数据转换为计算优化的表示形式。这使计算优化数据与存储优化数据之间的物理数据独立性成为可能。
Alluxio2.2.0版本实现了上述组件。主要应用例子是在Presto引擎上通过Hive连接器使用Hive元存储。Alluxio结构化数据管理将下列几个新组建引入了生态中。
- Presto的结构化数据客户端(Alluxio的Presto连接器)
- 目录服务(CatalogService)
- 基本转换服务(TransformationService)
1、用于Alluxio的Presto连接器
Alluxio结构化数据管理的开发人员预览版提供了用于Alluxio的新Presto连接器。与其他Alluxio组件的所有交互都将通过Alluxio的连接器进行。这使得Alluxio与Presto集成和配置变得更简单。
2、目录服务
新的Alluxio目录服务管理着系统中结构化数据的元数据。它将负责管理所有数据库,表和模式信息,以及所有数据存储的位置。
目录服务中的主要概览是底层数据库(UnderDatabase)。底层数据库是其他外部目录和数据库的抽象。这种抽象使Alluxio目录服务能够连接到不同的目录并收集有关结构化数据的信息。底层数据库抽象等效于Alluxio文件系统的底文件系统(UnderFilesystem)抽象。开发人员预览版包含了底数据库的Hive元存储实现。
用户与目录服务交互的主要方式是将数据库“附加(attach)”到目录。附加数据库会将Alluxio目录数据库(catalog database)与现有目录数据库关联。例如,当您将名为“hive_db”的Hive数据库附加到名为“alluxio_db”的Alluxio目录数据库时,这将在两个数据库之间建立连接,并且每当Alluxio目录服务访问数据库“alluxio_db”时,它将代表Hive数据库“hive_db”。将现有数据库附加到目录服务等同于将现有文件系统挂载到Alluxio文件系统。
Alluxio目录服务为Alluxio环境中的Presto提供了许多好处。首先,Alluxio的部署非常简单。用户只需要将现有的Hive数据库附加到Alluxio目录服务,然后将Alluxio的Presto连接器指向Alluxio目录服务,以便使用Presto部署Alluxio。Alluxio的部署不再需要更改Hive元存储中的任何表位置,也无需重新启动或重新配置任何Hive服务。
Alluxio目录服务还可以对结构化数据进行额外模式感知优化。例如,一旦Hive元存储附加到Alluxio目录服务后,目录服务将自动挂载适当的表,并自动为表的元数据提供在Alluxio中的存储位置。
3、转换服务
Alluxio转换服务的主要目标是将数据转换为计算优化表示,这种数据表示独立于存储优化格式。这样可以实现物理数据独立性。
它包括可用于表的3种类型的转换:合并,格式转换和排序。
-
合并:通常表中的文件过多会对降低SQL引擎处理效率。因此,合并转换使数据可以合并为更少的文件。通过这种方法,数据可以采用更有利于优化计算的格式,而与最初存储数据的方式无关。
-
格式转换:某些类型的文件更有效地读取和处理。例如,列格式和二进制格式(如parquet和ORC)通常比原始文本文件处理起来更高效。因此,在这次的开发人员预览版本中提供了CSV到Parquet的转换。
总 结
我们很高兴在Alluxio2.2.0版本中引入Alluxio结构化数据管理!结构化数据管理的主要组件的初步实现已可以使用。在下一篇文章中,我们将通过一个简单的示例来逐步说明如何在Alluxio中使用结构化数据管理。
如果您不确定您的使用案例,请随时在我们的Alluxio社区slack频道中提问。