繁体   English   中英

Presto 是否开箱即用地在内部缓存中间结果?

[英]Does Presto cache intermediate results internally out of the box?

Presto 有多个连接器 虽然连接器确实实现了读写操作,但从我阅读的所有教程来看,它们似乎通常用作仅供读取的数据源。 例如, netflix在 Amazon S3 上有“10 PB”的数据,他们明确声明在 Presto 工作节点上没有使用磁盘(也没有 HDFS)。 所述用例是“临时交互式”查询。

此外,Amazon Athena 本质上是 S3+Presto,并且具有类似的用例。

我很困惑这在实践中如何运作。 显然,您不希望每次查询都读取 10 PB 的数据。 所以我假设,您想在内存中保留一些以前获取的数据,例如数据库索引。 但是,由于对数据和查询没有任何限制,我无法理解这如何有效。

用例 1:我经常运行相同的查询,例如在仪表板上显示指标。 Presto 是否避免重新扫描已经“已知”的数据点?

用例 2:我正在分析一个大型数据集。 每个查询都略有不同,但是有共同的子查询,或者我们过滤到数据的共同子集。 Presto 是否从以前的查询中学习并继承中间结果?

或者,如果不是这种情况,是否建议我将中间结果存储在某处(例如 CREATE TABLE AS...)?

Presto 本身没有数据缓存层。 老实说,我不认为您在这里提出的功能应该由 Presto 作为 SQL 分析引擎提供。 对于你提到的两个用例,我建议 将 Alluxio 与 Presto 一起部署作为缓存层来帮助:

用例 1:我经常运行相同的查询,例如在仪表板上显示指标。 Presto 是否避免重新扫描已经“已知”的数据点?

作为缓存层,Alluxio 可以检测来自 Presto(或其他应用程序)的数据访问模式,并做出缓存/驱逐决策以服务于内存层中最常用的数据(根据您的配置,也可以是 SSD 或 HDD)。 当数据访问不一致时,这将有所帮助。

用例 2:我正在分析一个大型数据集。 每个查询都略有不同,但是有共同的子查询,或者我们过滤到数据的共同子集。 Presto 是否会从之前的查询中学习并继承中间结果?

随着对输入数据的更多了解,您可以在 Alluxio 中执行数据策略,以 (1) 将数据(常见子查询)预加载到缓存空间中,(2) 设置 TTL 以从 Alluxio 缓存空间中退出数据,为其他热数据腾出空间, (3) 在某些输入路径上设置缓存策略(例如,在某些路径上缓存,在其他路径上不缓存)。

查看更多运行 Presto/Alluxio 堆栈的技巧: https ://www.alluxio.io/blog/top-5-performance-tuning-tips-for-running-presto-on-alluxio-1/

据我所知,没有中间隐式缓存层。 当您在集群上使用 HDFS 时,您肯定会受益于操作系统磁盘缓存,因此下一次查询运行会更快,但您不会获得即时缓存结果。 类似的数据块级缓存也可能适用于 S3。

通常,没有合理大小的系统可以筛选 10 PB 的数据,因为读取所有数据会花费大量时间。 但是,可以对数据进行分区,以便 Presto 或多或少知道需要扫描哪些数据。 当分区与查询条件一致时(例如,按数据对数据进行分区并查询最近的数据),这会非常有效。

当您的数据分区与查询的方式不同,并且您不想以不同的方式重新分区时,使用create table ... as select保存临时结果很有意义。 您还可以使用一些内存存储来存储此类临时表,例如raptor (当前未记录)或memory连接器,以便更快地访问。

有关分区、调整存储和查询的一些入门技巧,您可以查看https://aws.amazon.com/blogs/big-data/top-10-performance-tuning-tips-for-amazon-athena/

改善 Presto 查询延迟的常见优化是缓存工作集,以避免来自远程数据源或通过慢速网络进行的不必要的 I/O。 本节描述了以下选项来利用 Alluxio 作为 Presto 的缓存层。

Alluxio 文件系统将 Presto Hive 连接器作为独立的分布式缓存文件系统提供给 HDFS 或对象存储(如 AWS S3、GCP、Azure blob 存储)。 用户可以通过文件系统接口明确了解缓存使用情况并控制缓存。 例如,可以预加载 Alluxio 目录中的所有文件以预热 Presto 查询的缓存,并为缓存数据设置 TTL(生存时间)以回收缓存容量。

Alluixo 结构化数据服务通过基于 Option1 的目录和缓存文件系统与 Presto 交互。 此选项在选项 1 之上提供了额外的好处,即无需修改 Hive Metastore 上的表位置即可无缝访问现有 Hive 表,并通过合并许多小文件或转换输入文件的格式来进一步优化性能。

资料来源: Presto Alluxio 缓存服务

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM