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
根据切片开始偏移量选择部分。 第一个字节位于第一部分的切片最好调度到 NodeA
或 NodeB
上。
通过设置 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 客户端指标 以获取可用指标的完整列表。