Redis HBO プロバイダー

Redis HBO プロバイダーは、履歴ベースの最適化 (HBO) の履歴統計を格納および取得するためのカスタム構成された Redis クライアントのロードをサポートします。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 にアクセスするために Redis サーバー URI プロパティ hbo.redis-provider.server_uri を必要とします。カスタム 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://localhost: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 に、Plugin エントリクラス 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 は適切に提供する必要があります。