Redis HBO 提供程序

Redis HBO 提供程序支持加载自定义配置的 Redis 客户端,用于存储和检索用于历史优化 (HBO) 的历史统计信息。Redis 客户端是有状态的,并且基于 Lettuce。RedisClient 和 RedisClusterClient 均受支持,RedisClusterAsyncCommandsFactory 旨在由用户扩展以进行自定义配置。

配置

创建 etc/catalog/redis-provider.properties 以挂载 Redis HBO 提供程序插件。

根据需要编辑配置属性

配置属性

以下配置属性可用于 etc/catalog/redis-provider.properties

属性名称

描述

coordinator

Presto 服务器是否为协调器的布尔属性

hbo.redis-provider.server_uri

Redis 服务器 URI

hbo.redis-provider.total-fetch-timeoutms

Redis 获取请求的最大超时时间(毫秒)

hbo.redis-provider.total-set-timeoutms

Redis 设置请求的最大超时时间(毫秒)

hbo.redis-provider.default-ttl-seconds

要存储的 Redis 数据的 TTL(秒)

hbo.redis-provider.enabled

此插件在生产环境中是否启用的布尔属性

credentials-path

Redis 凭据的路径

hbo.redis-provider.cluster-mode-enabled

集群模式是否启用的布尔属性

用于历史优化器的协调器配置

这些属性必须在 Presto 协调器中的 etc/config.properties 中配置,以便在规划中跟踪和使用历史统计信息

属性名称

描述

默认值

optimizer.use-history-based-plan-statistics

是否启用使用历史规划统计信息的布尔属性

false

optimizer.track-history-based-plan-statistics

是否启用跟踪历史规划统计信息的布尔属性

false

optimizer.history-canonical-plan-node-limit

仅当规范规划中的节点数量在此限制范围内时,才使用基于历史的优化

1000

optimizer.history-based-optimizer-timeout

优化器在规划散列和收集统计信息中的端到端超时时间

10(秒)

凭据

插件需要 Redis 服务器 URI 属性 hbo.redis-provider.server_uri 来访问 Redis。根据您的自定义 Redis 部署,您可能需要添加其他凭据。

本地测试设置

  1. 按照 Redis 文档设置本地 Redis 集群以 创建 Redis 集群

  2. presto-main/etc/config.properties 中,将 ../redis-hbo-provider/pom.xml,\ 添加到 plugin.bundles 中。

  3. presto-main/etc/ 中,使用以下示例属性创建文件 redis-provider.properties

    coordinator=true
    hbo.redis-provider.enabled=true
    hbo.redis-provider.total-fetch-timeoutms=5000
    hbo.redis-provider.total-set-timeoutms=5000
    hbo.redis-provider.default-ttl-seconds=4320000
    hbo.redis-provider.cluster-mode-enabled=true
    hbo.redis-provider.server_uri=redis://127.0.0.1:7001/
    

生产环境设置

您可以将插件 JAR 文件放置在生产环境的 plugins 目录中。

或者,请按照此方法确保插件在 Presto 构建期间加载。

  1. <fileSets> 中的 presto-server/src/main/assembly/presto.xml 中添加以下内容以注册插件

    <fileSet>
       <directory>${project.build.directory}/dependency/redis-hbo-provider-${project.version}</directory>
       <outputDirectory>plugin/redis-hbo-provider</outputDirectory>
    </fileSet>
    
  2. redis-hbo-provider/src/main/resources 中,使用插件条目类 com.facebook.presto.statistic.RedisProviderPlugin 创建文件 META-INF.services

  3. presto-server/pom.xml 中添加对该模块的依赖关系

    <dependency>
        <groupId>com.facebook.presto</groupId>
        <artifactId>redis-hbo-provider</artifactId>
        <version>${project.version}</version>
        <type>zip</type>
        <scope>provided</scope>
    </dependency>
    
  4. (可选)在 com.facebook.presto.statistic.RedisClusterAsyncCommandsFactory 中添加您自定义的 Redis 客户端连接登录信息。

    注意:必须正确提供 AsyncCommands。