概要速览📕
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 而言,每次把分片
Meta的Presto与Alluxio合作:优化数据缓存与软亲和调度

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

被折叠的 条评论
为什么被折叠?



