Meta 公司新探索 | 利用 Alluxio 数据缓存降低 Presto 延迟

Meta的Presto团队与Alluxio合作开发开源数据缓存解决方案,降低查询延迟和IO操作。通过Alluxio缓存,Meta内部用例中查询延迟显著下降,IO性能提升。文章介绍了Presto架构、数据缓存的重要性以及软亲和调度策略,展示了如何通过亲和性调度和本地数据缓存提高查询效率。

概要速览📕

Meta 公司(前“Facebook 公司”,下文统称“Meta”)的 Presto 团队一直在与 Alluxio 合作为 Presto 提供开源数据缓存方案。该方案被用于 Meta 的多个用例,来降低从诸如 HDFS 等远端数据源扫描数据产生的查询延迟。实验证明,使用 Alluxio 数据缓存后,查询延迟和 IO 扫描都得到了显著优化。

我们发现,Meta 架构环境中的多个用例都得益于 Alluxio 数据缓存。以 Meta 的一个内部用例为例,其各分位的查询延迟分别下降了 33%(P50)、54%(P75)和 48%(P95)。此外,远端数据源扫描数据的 IO 性能提升了 57%。

Presto 架构📖

Presto 的架构允许存储和计算独立扩展,但是扫描远端存储中的数据可能会产生昂贵的操作成本,也难以达到交互式查询的低延迟要求。

Presto worker 只负责对从独立(通常是远端)数据源扫描的数据执行查询计划片段,而不会存储任何远端数据源的数据,因此计算可以进行弹性扩展。

下面的架构图清晰地展示了从远端 HDFS 读取数据的路径。每个 worker 都会独立地从远端数据源中读取数据,本文将只讨论对远端数据源读取操作的优化。

image.png

Presto +数据缓存架构📖

为了解决用例的亚秒级延迟问题,我们决定进行多种优化,其中一个重要的优化就是实现数据缓存。数据缓存作为一种传统的优化方式,能让工作数据集更靠近计算节点,减少对远端存储的访问,从而降低延迟并节约 IO 开销。

其中的困难在于,如果从远端数据源访问 PB 级别的数据时没有固定访问模式的话,如何能实现有效的数据缓存,此外,有效数据缓存的另一个要求是在 Presto 等分布式环境中实现数据的亲和性。

添加数据缓存功能后,Presto 的架构如下所示:

image.png

关于数据缓存,后面会有更详细的说明。

软亲和调度📖

Presto 目前的调度器在分配分片时已经把 worker 的负载纳入考量,因此该调度策略使得工作负载在 worker 之间均匀分配。但从数据本地性的角度来看,分片是随机分配的,不能保证任何亲和性,而亲和性恰恰是实现有效数据缓存的必备条件。对 Coordinator 而言,每次把分片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值