深入探讨 Presto 中的缓存

这篇具有很好参考价值的文章主要介绍了深入探讨 Presto 中的缓存。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【squids.cn】 全网zui低价RDS,免费的迁移工具DBMotion、数据库备份工具DBTwin、SQL开发工具等

Presto是一种流行的开源分布式SQL引擎,使组织能够在多个数据源上大规模运行交互式分析查询。缓存是一种典型的提高 Presto 查询性能的优化技术。它为 Presto 平台提供了显着的性能和效率改进。

缓存通过将频繁访问的数据存储在内存或快速本地存储中,避免了昂贵的磁盘或网络行程来重新获取数据,从而加快了整体查询的执行速度。在本文中,我们将深入探讨 Presto 的缓存机制以及如何使用它们来提高查询速度并降低成本。

缓存的好处

缓存提供了三个关键优势。通过在 Presto 中实施缓存,您可以:

  1. 提高查询性能。缓存频繁访问的数据使 Presto 能够从更快、更近的缓存中检索结果,而不是扫描速度较慢的存储。对于重复的分析查询,这可以将查询速度提高几个数量级,从而减少总体延迟。通过加速查询执行,缓存可实现交互式查询和更快的洞察时间。

  2. 降低基础设施成本。缓存减少了从 S3 等远程存储系统读取的数据量,从而降低了出口费用和存储 API 请求的费用。对于存储在云中的数据,缓存可以最大限度地减少通过网络重复检索数据。这可以节省大量成本,尤其是对于大型数据集。

  3. 最大限度地减少网络开销。通过减少 Presto 组件和远程存储之间不必要的数据传输,缓存可以缓解网络拥塞。本地缓存可防止分布式 Presto 工作线程之间的网络链接出现瓶颈。它还减少了与外部数据源连接的负载和带宽使用。

总体而言,缓存可以提高 Presto 查询的性能和效率,为基于 Presto 的分析平台提供巨大的价值和投资回报率。

Presto 中不同类型的缓存

Presto中有两种类型的缓存,内置缓存和第三方缓存。内置缓存包括Metastore缓存、文件列表缓存和Alluxio SDK缓存。它使用 Presto 集群的内存和 SSD 资源,与 Presto 在同一进程中运行,以获得最佳性能。

内置缓存的主要优点是延迟非常低并且没有网络开销,因为数据在 Presto 集群中本地缓存。然而,内置缓存容量受到工作节点资源的限制。

第三方缓存,例如Alluxio分布式缓存,可以独立部署,并提供更好的可扩展性和更大的缓存容量。它们对于大规模分析工作负载、跨区域/云部署以及降低云存储的 API 和出口成本特别有利。

presto缓存,缓存,后端,sql,分布式,云原生

上图和下表总结了不同的缓存类型及其相应的资源类型和位置。

缓存类型 缓存位置 资源类型
元存储缓存 Presto协调器 内存

列出文件缓存

Presto协调器 内存

Alluxio SDK缓存

Presto工作节点 内存/SSD

Alluxio分布式缓存

Alluxio工作节点 内存/SSD/HDD

Presto的缓存默认都是禁用的。您需要修改Presto的配置来激活它们。我们将在接下来的部分更详细地解释不同的缓存类型以及如何通过配置属性启用它们。

元存储缓存

Presto 的元存储缓存将 Hive 元存储查询结果存储在内存中,以便更快地访问。这减少了规划时间和元存储请求。

当 Hive 元存储过载时,元存储缓存非常有用。对于大型分区表,缓存将分区元数据存储在本地,从而实现更快的访问和更少的重复查询。这减少了 Hive 元存储上的总体负载。

要启用元存储缓存,请使用以下设置:

hive.partition-versioning-enabled=truehive.metastore-cache-scope=ALLhive.metastore-cache-ttl=1dhive.metastore-refresh-interval=1dhive.metastore-cache-maximum-size=10000000

请注意,如果表频繁更新,您应该为元存储版本化缓存配置较短的 TTL 或刷新间隔。较短的缓存刷新间隔可确保仅存储当前元数据,从而降低查询执行中元数据过时的风险。这可以防止 Presto 使用过时的数据。

列出文件状态缓存

列表文件缓存存储文件路径和属性,以避免从名称节点或对象存储中重复检索。

当 HDFS namenode 过载或对象存储的文件列表性能较差时,列表文件缓存可显着改善查询延迟。列表文件调用可能会成为 HDFS 的瓶颈,使名称节点不堪重负,并增加 S3 存储的成本。启用列表文件状态缓存后,Presto 协调器会在内存中缓存文件列表,以便更快地访问常用数据,从而减少冗长的远程 listFile 调用。

要配置列表文件状态缓存,请使用以下设置:

hive.file-status-cache-expire-time=1hhive.file-status-cache-size=10000000hive.file-status-cache-tables=*

请注意,列表文件状态缓存只能应用于密封目录,因为 Presto 会跳过缓存开放分区以确保数据新鲜度。

Alluxio SDK缓存(原生)

Alluxio SDK缓存是Presto内置的缓存,用于减少表扫描的延迟。由于Presto是一个与存储无关的引擎,因此其性能经常受到存储的限制。在Presto工作节点的SSD上本地缓存数据可以实现快速的查询访问和执行。通过最小化重复的网络请求,Alluxio缓存还降低了对远程数据的云出口费用和存储API成本。

Alluxio SDK缓存对于查询远程数据特别有益,如跨区域或混合云对象存储。这大大减少了查询延迟以及相关的云存储出口费用和API成本。

使用以下设置启用Alluxio SDK缓存:

cache.enabled=truecache.type=ALLUXIOcache.base-directory=file:///tmp/alluxiocache.alluxio.max-cache-size=100MB

为了达到最好的缓存命中率,将节点选择策略改为软亲和性:

hive.node-selection-strategy=SOFT_AFFINITY

presto缓存,缓存,后端,sql,分布式,云原生

上图展示了软亲和力节点选择架构。软关联调度尝试根据文件路径向工作程序发送请求,通过在工作程序缓存中定位数据来最大化缓存命中率。软亲和力之所以是“软”,是因为它不是一个严格的规则——如果首选工作人员繁忙,则将分片发送到另一个可用工作人员而不是等待。

如果遇到诸如“Unsupported Under FileSystem”之类的错误,请从 Maven 存储库下载最新的Alluxio 客户端 JAR并将其放置在 {$presto_root_path}/plugin/hive-hadoop2/ 目录中。

Alluxio分布式缓存(第三方)

如果 Presto 内存或存储不足以容纳大型数据集,则使用第三方缓存解决方案可以为频繁的数据访问提供扩展缓存。第三方缓存可以为 Presto 提供多种优化:

  • 通过减少 I/O 延迟来提高性能

  • 加速远程跨数据中心或云数据存储的查询

  • 在 Presto 工作线程、集群和其他引擎(例如Apache Spark)之间提供共享缓存

  • 启用弹性缓存以节省现货实例的成本

Alluxio 分布式缓存是第三方缓存的一个示例。如下图所示,Alluxio分布式缓存部署在Presto和S3等存储之间。Alluxio使用主从架构,其中主节点管理元数据,工作节点管理本地存储(内存、SSD、HDD)上的缓存数据。当缓存命中时,Alluxio工作线程将数据返回给Presto工作线程。否则,Alluxio工作线程从持久存储中检索数据并缓存数据以供将来使用。Presto 工作线程处理缓存的数据,协调器将结果返回给用户。

presto缓存,缓存,后端,sql,分布式,云原生

以下是使用 Presto 部署 Alluxio 分布式缓存的步骤。

1.将Alluxio客户端JAR分发到所有Presto服务器

为了让 Presto 能够与 Alluxio 服务器通信,Alluxio 客户端 jar 必须位于 Presto 服务器的类路径中。将 Alluxio 客户端 JAR /<PATH_TO_ALLUXIO>/client/alluxio-2.9.3-client.jar 放入所有 Presto 服务器上的目录 ${PRESTO_HOME}/plugin/hive-hadoop2/ 中。使用以下命令重新启动 Presto 工作线程和协调器:

$ ${PRESTO_HOME}/bin/launcher restart

2.将Alluxio配置添加到Presto的HDFS配置文件中

您可以将Alluxio的属性添加到HDFS配置文件中,例如core-site.xml和hdfs-site.xml,然后在文件${PRESTO_HOME}/etc/catalog/hive.properties中使用Presto属性hive.config.resources指向每个 Presto Worker 上的 HDFS 配置文件的位置。

hive.config.resources=/<PATH_TO_CONF>/core-site.xml,/<PATH_TO_CONF>/hdfs-site.xml

然后,将该属性添加到 HDFS core-site.xml 配置中,该配置由 Presto 属性中的 hive.config.resources 链接。

<configuration>
  <property>
    <name>alluxio.master.rpc.addresses</name>
<value>master_hostname_1:19998,master_hostname_2:19998,master_hostname_3:19998</value>
  </property>
</configuration>

基于上面的配置,Presto能够定位Alluxio集群并将数据访问转发给它。

为您的用例选择合适的缓存

Presto 和 Alluxio 开源社区不断致力于改进现有的缓存功能并开发新的功能来增强查询速度、优化效率并提高系统的可扩展性和可靠性。

缓存是提高Presto查询性能的强大方式。在本文中,我们介绍了Presto中的不同缓存机制,包括元存储缓存、列出文件状态缓存、Alluxio SDK缓存和Alluxio分布式缓存。如下表所示,您可以根据您的用例使用这些缓存来加速数据访问。

缓存类型

何时使用
元存储缓存

规划时间慢 

Hive metastore慢 

具有数百个分区的大表

列出文件状态缓存

超载的HDFS namenode

如S3这样的超载对象存储

Alluxio SDK缓存 外部存储速度慢或不稳定
Alluxio分布式缓存

跨区域、多云、混合云

与其他计算引擎共享数据

作者:Beinan Wang and Hope Wang

更多内容请关注公号【云原生数据库

squids.cn,云数据库RDS,迁移工具DBMotion,云备份DBTwin等数据库生态工具。文章来源地址https://www.toymoban.com/news/detail-730005.html

到了这里,关于深入探讨 Presto 中的缓存的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Presto自定义函数

    创建目录META-INF/services 创建文件 com.facebook.presto.spi.Plugin,指明你所实现的Plugin位置 实现Plugin接口

    2024年02月13日
    浏览(40)
  • 2. Presto应用

    1、Presto安装使用 参考官方文档:https://prestodb.io/docs/current/ Presto是一个高效的查询分析引擎,支持多种数据源,例如(Hive、MySQL、MD、Kafka等),内部查询是基于内存操作的,相比较Spark效率更高,而且更大的特点在于可以自定义内存空间,设置内存使用大小。 安装部署 测试

    2024年02月02日
    浏览(40)
  • Presto集群安装部署

    2020年12月27日,PrestoSQL为了更好的与Facebook的Presto进行区分而改名为Trino。PrestoSQL/Trino是一种分布式SQL查询引擎,旨在查询分布在一个或多个异构数据源上的大型数据集 PrestoSQL官网:https://trino.io PrestoSQL官方文档:https://trino.io/docs/current/overview.html 更多关于Presto的介绍详见文章

    2024年02月04日
    浏览(33)
  • Presto 安装部署与介绍

    presto官网:Presto: Free, Open-Source SQL Query Engine for any Data Presto简介: Presto 是由 Facebook 开发的一个分布式 SQL 查询引擎, 它被设计为用来专门进行高速、实时的数据分 析。它的产生是为了解决 Hive 的 MapReduce 模型太慢以及不能通过 BI 或 Dashboards 直接展现 HDFS 数 据等问题。 Pres

    2023年04月09日
    浏览(35)
  • 1. Presto基础

    一、presto基础操作 二、时间函数 0、当前日期/当前时间 1、转时间戳 1)字符串转时间戳 (推荐) 即:‘2019-04-26’ 转换成 2019-04-26 00:00:00.000 2)按照format指定的格式,将字符串string解析成timestamp。 注:字符串格式和format格式需保持一致,以下为错误示例: 注:时间戳格式化

    2024年02月02日
    浏览(40)
  • Presto VS Spark

    5个节点,每个节点10G内存。 测试SQL,每个执行3次,求平均,对比计算性能。 Spark:2.3.1 Presto: 0.208 Spark: Presto: Spark计算比Presto快一倍,胜出。 平分秋色,Spark会好那么一丢丢。 Spark: 0.43s Presto: 0.5s Presto无论聚合计算,还是全表扫描查询,都略比Spark有优势,不过总的查询不

    2023年04月23日
    浏览(29)
  • presto连接mongodb

    1.包下载 2.创建配置目录 3.特定于每个节点的环境配置 4.Java虚拟机的命令行选项

    2024年02月16日
    浏览(37)
  • Presto的介绍、使用和原理架构

    介绍 Presto是一款Facebook开源的MPP架构的OLAP查询引擎,可针对不同数据源执行大容量数据集的一款分布式SQL执行引擎,数据量支持GB到PB字节,主要用来处理秒级查询的场景。 Presto 本身并不存储数据, ,但是可以接入多种数据源,并且支持跨数据源的级联查询,而且基于内存

    2024年02月03日
    浏览(43)
  • 大数据入门之Presto/Trino

    What is Presto ? Presto是由Facebook开发的分布式sql查询引擎,用来进行高速、实时的数据查询 Presto的产生是为了解决Hive的MapReduce模型太慢且不能通过BI等工具展现HDFS的问题 Presto是一个计算引擎,它不存储数据,通过丰富的connector获取第三方服务的数据,并支持扩展。可以通过连接

    2024年02月07日
    浏览(42)
  • 数据库:Hive转Presto(二)

    继续上节代码,补充了replace_func函数,        

    2024年02月07日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包