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. 將以下內容新增至 presto-server/src/main/assembly/presto.xml 中的 <fileSets>,以註冊外掛程式

    <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 中,建立檔案 META-INF.services 並包含外掛程式進入類別 com.facebook.presto.statistic.RedisProviderPlugin

  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。