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=trueDenodo 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 サーバーへのコネクションを構成します。
プロパティ |
説明 |
|---|---|
|
Denodo コネクションの詳細のセクション。Denodo は Presto On Velox を使用してクエリを高速化します。 |
|
Denodo のホストアドレスを定義します。 |
|
Denodo Arrow Flight のポートを定義します。Arrow Flight のデフォルトのポートは 9994 です。 |
|
Boolean。Denodo サーバーで SSL を有効にするかどうかを定義します。 |
|
Denodo VDP の PEM 証明書のファイル名。ファイルは |
|
Denodo ユーザー名。 |
|
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 つの部分で構成されます。
クエリが使用するメモリ。
query-memory-gbで指定します。システムが使用するメモリ。ディスクスピルやキャッシュプリフェッチなどです。
デフォルト値: 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-gbがsystem-memory-gb以下になるようにします。query-memory-gbはマシンのメモリの 85% に設定することをお勧めします。また、system-mem-limit-gbはsystem-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.yamlでs3Endpointプロパティを更新して、S3 バケットに一致する正しいリージョンを含めます。たとえば、s3.<region>.amazonaws.comという構造を使用します。