ユーザーマニュアル

Presto on Velox

Denodo 9.4 より、Denodo Lakehouse Accelerator 2.0.0 には Presto C++ (推奨) と Presto Java の両方のエンジンが含まれています。Presto C++ エンジンは Presto on Velox と呼ばれ、負荷の高いワークロードにおけるパフォーマンスを大幅に向上させることを目的に設計されています。

機能

Presto on Velox エンジンの初期リリースには、以下のコネクターとストレージシステムのサポートが含まれます。

コネクター

コネクター

読み取り

作成/挿入 (*)

更新

マージ

削除

Hive (Parquet ファイル)

×

×

×

Iceberg

○ (パーティション分割されていないデータセットのみ)

×

×

×

Delta

×

×

×

×

×

(*) 書き込み操作をサポートするには、Denodo Lakehouse Accelerator の Hive カタログで次のプロパティが有効化されていることを確認してください。

hive.non-managed-table-writes-enabled=true

Denodo Lakehouse Accelerator 内の Hive テーブルに適用される 挿入の制限 に注意してください。

重要

Presto on Velox の S3 エンドポイントの構成

Presto on Velox エンジンを Amazon S3 で使用する場合、バケットがデフォルトの us-east-1 リージョンの外部にあるときは、 s3Endpoint を明示的に構成する必要があります。

エンドポイントをバケットの物理的なリージョンに一致させないと、 VeloxRuntimeError (HTTP 301 Moved Permanently) が発生します。 values.yaml で正しいリージョンの形式 s3.<region>.amazonaws.com を使用していることを確認します。

オブジェクトストレージ

  • AWS S3 (および S3 互換ストレージ): サポートされています。

  • HDFS: サポートされています。

  • Azure: 現在サポート されていません

  • GCS: 現在サポート されていません

サポートされているカタログ

Presto on Velox では以下のカタログがサポートされています。

Hive メタストア
  • サポートされているテーブル: Hive および Iceberg

AWS Glue Data Catalog
  • サポートされているテーブル: Hive および Iceberg

Unity Catalog (Uniform および Iceberg を介した Delta Lake テーブル)
  • サポートされているテーブル: Iceberg

Nessie カタログ
  • サポートされているテーブル: Iceberg

Snowflake Open Catalog
  • 現在サポートされていません

Kubernetes プラットフォーム

Denodo Lakehouse Accelerator は以下のプラットフォームでサポートされています。

  • Amazon EKS

  • Red Hat OpenShift

  • Azure AKS

  • Google GKE

Helm チャートの構成

次世代のエンジンを利用するには、まず Velox エンジンを有効にする必要があります。これにより、Lakehouse Accelerator が従来の Java ワーカーから高パフォーマンスの C++ 実装に切り替わります。

Presto on Velox エンジンの有効化

Presto on Velox を有効にするには、 values.yaml で次のプロパティを true に設定します。

presto:
  prestoOnVelox:
    enabled: true

ちなみに

以下の denodoOnVeloxConnector 設定を有効にするには、このプロパティを有効にする必要があります。

Denodo コネクションの詳細

組み込み MPP の高速化 (enlace) を有効にするには、 presto.denodoOnVeloxConnector セクション を介して、Arrow Flight SQL プロトコルを使用して Denodo サーバーへのコネクションを構成します。

プロパティ

説明

presto.denodoOnVeloxConnector

Denodo コネクションの詳細のセクション。Denodo は Presto On Velox を使用してクエリを高速化します。

...arrowFlightHost

Denodo のホストアドレスを定義します。

...arrowFlightPort

Denodo Arrow Flight のポートを定義します。Arrow Flight のデフォルトのポートは 9994 です。

...ssl

Boolean。Denodo サーバーで SSL を有効にするかどうかを定義します。

...pemCertificate

Denodo VDP の PEM 証明書のファイル名。ファイルは presto/secrets/ に存在する必要があります。

...user

Denodo ユーザー名。

...password

Denodo パスワード (Denodo パスワードポリシーに準拠している必要があります)。

ワーカーメモリの構成

安定性を確保するため、 presto.worker.additionalConfig でメモリ制限を調整する必要があります。

以下の値は r6a.8xlarge のインスタンス (それぞれ 256 GiB RAM) 用に調整されています。自身のクラスタで別のインスタンスタイプを使用している場合は、それに応じてこれらのメモリパラメータを調整してください。

presto:
  worker:
    additionalConfig: [
      system-memory-gb: "231",
      query-memory-gb: "219",
      query.max-memory-per-node: "219GB",
      system-mem-limit-gb: "241"
    ]
  • system-memory-gb

    内部メモリアロケーターによって適用されるメモリ割り当て制限。次の 2 つの部分で構成されます。

    1. クエリが使用するメモリ。 query-memory-gb で指定します。

    2. システムが使用するメモリ。ディスクスピルやキャッシュプリフェッチなどです。

    • デフォルト値: 57

    • 推奨: マシンで使用可能なメモリの約 90% に設定します。これにより、用途が決まっていないメモリを処理するためのバッファを提供し、メモリ不足 (OOM) 条件を防止します (例: デフォルトの 57 GB は 64 GB のマシン用に最適化されています)。

  • query-memory-gb

    ワーカーノード上のすべての同時クエリで使用可能な合計メモリを指定します (GB 単位)。ディスクスピルやキャッシュプリフェッチなど、システムによる使用量はこの制限に加算されません。

    • デフォルト値: 38

    • 推奨: マシンで使用可能なメモリの約 85% に設定します。

  • query.max-memory-per-node

    単一のクエリに許可する最大メモリ使用量。

    • デフォルト値: 4 GB

    • 推奨: query-memory-gb と同じ値に設定します。

  • system-mem-limit-gb

    システムメモリのしきい値を指定します。サーバーの使用量がこの制限を超えると、メモリプッシュバックまたはヒープダンプがトリガーされます。

    • デフォルト値: 60

    • 推奨: system-memory-gb 以上に設定します。ただし、マシンの合計物理メモリを超えないようにしてください。

トラブルシューティング

system-memory-gb がノードのメモリより多い

system-memory-gb がノードのメモリより多い
 Line: /prestissimo/presto_cpp/main/LinuxMemoryChecker.cpp:102, Function:start, Expression: config_.systemMemLimitBytes <= availableMemoryOfDeployment (64424509440 vs. 33367973888) system memory limit = 64424509440 bytes is higher than the available machine memory of deployment = 33367973888 bytes., Source: RUNTIME, ErrorCode: INVALID_STATE
原因

構成されている system-memory-gb がデプロイノードで使用可能な物理メモリを超えています。Presto on Velox は起動時にチェックを実行して割り当てが安全であることを確認します。

解決策

system-memory-gb の値を、ノードの合計 RAM の約 90% になるように調整します。正確に比較するには (バイト単位)、エラーログを確認します。

query-memory-gb が system-memory-gb より多い

query-memory-gb が system-memory-gb より多いとクラッシュする
 Reason: (38 vs. 23) Query memory capacity must not be larger than system memory capacity
 Retriable: False
 Expression: queryMemoryGb <= memoryGb
原因

すべてのクエリ用に割り当てられているメモリ query-memory-gb は、システムによって管理される合計メモリの制限 system-memory-gb を超えることはできません。

解決策

構成を更新して、 query-memory-gbsystem-memory-gb 以下になるようにします。 query-memory-gb はマシンのメモリの 85% に設定することをお勧めします。また、 system-mem-limit-gbsystem-memory-gb 以上の値に設定しますが、マシンの合計物理メモリを超えないようにしてください。

system-mem-limit-gb がノードのメモリより多い

system-mem-limit-gb がマシンで使用可能なメモリより多いとクラッシュする
 Line: /prestissimo/presto_cpp/main/LinuxMemoryChecker.cpp:102, Function:start, Expression: config_.systemMemLimitBytes <= availableMemoryOfDeployment (64424509440 vs. 33367973888) system memory limit = 64424509440 bytes is higher than the available machine memory of deployment = 33367973888 bytes., Source: RUNTIME, ErrorCode: INVALID_STATE
 terminate called after throwing an instance of 'facebook::velox::VeloxRuntimeError'
   what():  Exception: VeloxRuntimeError
 Error Source: RUNTIME
 Error Code: INVALID_STATE
 Reason: (64424509440 vs. 33367973888) system memory limit = 64424509440 bytes is higher than the available machine memory of deployment = 33367973888 bytes.
 Retriable: False
 Expression: config_.systemMemLimitBytes <= availableMemoryOfDeployment
原因

メモリプッシュバックまたはヒープダンプのしきい値 system-mem-limit-gb が、ワーカーノードで実際に使用可能な RAM よりも多くなっています。

解決策

system-mem-limit-gb を減らし、マシンの合計メモリと同じか、やや少なくなるようにします。また、 system-memory-gb 以上にする必要があります。

ローカルのメモリ制限を超えるためにクエリが失敗する

ローカルのメモリ制限を超えるためにクエリが失敗する
 VeloxRuntimeError:  Local arbitration failure. Reclaimable used capacity 0B is less than min reclaim bytes 128.00MB
 ARBITRATOR[SHARED CAPACITY[6.00GB] STATS[numRequests 36 numRunning 24 numSucceded 0 numAborted 0 numFailures 1 numNonReclaimableAttempts 0 reclaimedFreeCapacity 0B reclaimedUsedCapacity 0B maxCapacity 6.00GB freeCapacity 4.00GB freeReservedCapacity 4.00GB] CONFIG[kind=SHARED;capacity=6.00GB;arbitrationStateCheckCb=(set);global-arbitration-abort-time-ratio=0.5;global-arbitration-memory-reclaim-pct=10;memory-reclaim-threads-hw-multiplier=0.5;memory-pool-min-reclaim-bytes=128MB;check-usage-leak=1;fast-exponential-growth-capacity-limit=512MB;slow-capacity-grow-pct=0.25;global-arbitration-enabled=false;memory-pool-min-free-capacity-pct=0.25;max-memory-arbitration-time=5m;memory-pool-reserved-capacity=64MB;global-arbitration-without-spill=false;memory-pool-min-free-capacity=128MB;memory-pool-initial-capacity=128MB;memory-pool-abort-capacity-limit=8GB;reserved-capacity=4GB;]]
 Memory Pool[20260209_115728_00001_2nr29_0 AGGREGATE root[20260209_115728_00001_2nr29_0] parent[null] MMAP track-usage thread-safe]<max capacity 4.00GB capacity 2.00GB used 1.84GB available 0B reservation [used 0B, reserved 2.00GB, min 0B] counters [allocs 0, frees 0, reserves 0, releases 0, collisions 0])>
原因

クエリが、ローカルのノード制限または合計クエリメモリプールによって許可されている以上のメモリを要求しました。これは通常、複雑な結合や大規模な集約で発生します。

解決策

クエリプランと構成されている制限を確認します。 query.max-memory-per-node または query-memory-gb を増やすか (ハードウェアが対応している場合)、クエリを最適化してメモリフットプリントを削減しなければならないことがあります。

S3 のクエリが HTTP 301 エラーで失敗する

S3 リージョンの不一致エラー (HTTP 301)
VeloxRuntimeError:  Failed to get metadata for S3 object due to: 'Unknown error'. Path:'s3://your-bucket-name/data.parquet', SDK Error Type:100, HTTP Status Code:301, S3 Service:'AmazonS3', Message:'No response body.', Source: RUNTIME, ErrorCode: INVALID_STATE
原因

Presto on Velox エンジンが、デフォルトのエンドポイント s3.us-east-1.amazonaws.com とは異なるリージョンにある S3 バケットにアクセスしようとしています。テーブルの作成とメタデータの確認は機能する可能性がありますが、エンドポイントが、バケットが存在する特定のリージョンをポイントしていない場合、ネイティブの Velox S3 クライアントは HTTP 301 (Moved Permanently) エラーで失敗します。

解決策

values.yamls3Endpoint プロパティを更新して、S3 バケットに一致する正しいリージョンを含めます。たとえば、 s3.<region>.amazonaws.com という構造を使用します。

フィードバックを追加