Alluxio SDK 缓存

概述

Presto 支持使用内置的 Alluxio SDK 缓存 来缓存输入数据,以通过 Hive 连接器减少查询延迟。 此内置缓存利用每个工作器上的本地存储(如 SSD),并具有可配置的容量和位置。 要了解其内部结构和延迟改进的基准测试结果,请阅读此 文章。 请注意,这是一个 **读取缓存**,对用户来说是 **完全透明的**,并由各个 Presto 工作器完全管理。 要为 Presto 提供独立的分布式缓存服务,用于具有自定义数据缓存策略的读写工作负载,请参阅 Alluxio 缓存服务

设置

启用 Alluxio SDK 缓存非常简单。 在 etc/catalog/hive.properties 中包含以下配置,并重启 Presto 协调器和工作器

hive.node-selection-strategy=SOFT_AFFINITY
cache.enabled=true
cache.type=ALLUXIO
cache.alluxio.max-cache-size=500GB
cache.base-directory=/tmp/alluxio-cache

在上面的配置示例中,

  • hive.node-selection-strategy=SOFT_AFFINITY 指示 Presto 调度程序在将任务调度到工作器时考虑数据亲和性,从而使数据缓存效率更高。 此配置属性默认为 NO_PREFERENCE,并且只有在设置为 SOFT_AFFINITY 时才会启用 SDK 缓存。 协调器上影响数据亲和性的其他配置包括 node-scheduler.max-pending-splits-per-task(每个任务的最大待处理切片)和 node-scheduler.max-splits-per-node(每个节点的最大切片)。

  • cache.enabled=true 启用 SDK 缓存,而 cache.type=ALLUXIO 将其设置为 Alluxio。

  • cache.alluxio.max-cache-size=500GB 将存储空间设置为 500GB。

  • cache.base-directory=/tmp/alluxio-cache 指定一个本地目录 /tmp/alluxio-cache。 请注意,此 Presto 服务器必须具有访问此本地目录的读写权限。

启用亲和性调度后,将为特定文件部分分配一组首选节点。 默认文件部分大小为 256MB。 例如,如果文件大小为 512MB,则会分配两个不同的亲和性偏好

  • [0MB..256MB] -> NodeA, NodeB

  • [256MB+1B..512MB] -> NodeC, NodeD

根据切片开始偏移量选择部分。 第一个字节位于第一部分的切片最好调度到 NodeANodeB 上。

通过设置 hive.affinity-scheduling-file-section-size 配置属性或 affinity_scheduling_file_section_size 会话属性来更改部分的大小。

监控

此 Alluxio SDK 缓存对用户来说是完全透明的。 要验证缓存是否正常工作,您可以检查由 cache.base-directory 设置的目录,并查看是否在其中创建了临时文件。 此外,Alluxio 在执行与缓存相关的操作时会导出各种 JMX 指标。 系统管理员可以通过检查以下指标来监控整个集群的缓存使用情况

  • Client.CacheBytesEvicted:从客户端缓存中驱逐的总字节数。

  • Client.CacheBytesReadCache:从客户端缓存中读取的总字节数(例如,缓存命中)。

  • Client.CacheBytesRequestedExternal:用户请求读取的导致缓存未命中的总字节数。 由于块读取,此数字可能小于 Client.CacheBytesReadExternal。

  • Client.CacheHitRate:由(从缓存中读取的字节数)/(请求的字节数)衡量的命中率。

  • Client.CacheSpaceAvailable:客户端缓存中可用的字节数。

  • Client.CacheSpaceUsed:客户端缓存使用的字节数。

请参阅 Alluxio 客户端指标 以获取可用指标的完整列表。