使用時のトラブルシューティング¶
このセクションでは、Denodo 組み込み MPP の使用時に最もよくある問題の解決方法について説明します。
Denodo 組み込み MPP をデプロイする際および Denodo Virtual DataPort から Denodo 組み込み MPP を使用する際によくみられるエラーを検出してトラブルシューティングするには、「 Denodo 組み込み MPP のトラブルシューティング 」を参照してください。
PKIX path building failed: unable to find valid certification path to requested target
- 原因
接続しようとしているサーバー証明書がクライアントの JVM のトラストストアに存在しません。問題は、サーバー証明書が、自己署名されているか、またはクライアントのトラストストアに存在しないプライベート証明機関によって署名されていることです。
- 解決策
Denodo 組み込み MPP の証明書を Denodo サーバーのトラストストアにインポートしていることを確認します。「 SSL/TLS 」のセクションの手順を参照してください。
KeyStores with multiple certificates are not supported
- 原因
このエラーは、複数の
SubjectAlternativeName (SAN)
要素を含む証明書が使用されている場合に発生します。SubjectAlternativeName [ DNSName: *.acme.com DNSName: acme.com DNSName: b.acme.com ]
- 解決策
以下に示すように
SubjectAlternativeName (SAN)
フィールドの要素が 1 つのみの証明書を使用してください。SubjectAlternativeName [ DNSName: *.acme.com ]
Forbidden (Service: Amazon S3; Status Code: 403; Error Code: 403 Forbidden;)
- 原因
最もよくある原因は、組み込み MPP が使用する IAM ロールに、S3 データにアクセスするために必要な権限が存在しないことです。
- 解決策
MPP から S3 データへのアクセスで 403 が返される問題をトラブルシューティングするには、以下のドキュメントを参照してください。
Query exceeded per-node user memory limit of xGB
- 原因
クエリがワーカーで使用できる最大ユーザーメモリ量
query.max-memory-per-node
のデフォルト値はJVM max memory * 0.1
です。組み込み MPP が割り当てる JVM の最大メモリはメモリマシンの 80% です (values.yaml
で構成されているmemoryPerNode
)。しかし、このエラーは、組み込み MPP がクエリを処理するために、JVM max memory * 0.1
より多いメモリが必要であることを意味します。- 解決策
メモリ設定の
query.max-memory-per-node
、query.max-total-memory-per-node
、およびquery.max-memory
を構成して使用可能なメモリを増やし、helm upgrade prestocluster prestocluster/
を実行して構成変更をクラスタに適用する必要があります。
メモリ設定の構成方法の詳細については、「 クエリのメモリ設定 」のセクションを参照してください。
大規模なクエリを処理する場合、メモリ設定の調整以外の解決策は、メモリの多いインスタンスを使用するか、クラスタのノード数を増やすことしかない場合があります。
Delta protocol version (2,5) is too new for this version of Delta Standalone Reader/Writer (1,2).
- 原因
Presto には制限があり、プロトコルバージョンが 1 より大きい Delta Lake テーブルの読み込みをサポートしていません。
- 解決策
この制限は対処されていますが、Delta Lake テーブルのプロトコルバージョンを 1.2 に戻すという回避策があります。
ALTER TABLE <table_identifier> SET TBLPROPERTIES('delta.minReaderVersion' = '1', 'delta.minWriterVersion' = '2'
Abandoned queries: Query ... has not been accessed since…
- 原因
これは、組み込み MPP のクライアントである Denodo がクエリ結果を処理していないか、または処理速度が遅いため、組み込み MPP がクライアントが離れたと見なしていることを意味します。
- 解決策
values.yaml
で MPP コーディネーターのquery.client.timeout
の値はデフォルトで 5 分 (5.00m
) ですが、これを増やしてhelm upgrade prestocluster prestocluster/
を実行し、構成変更をクラスタに適用することができます。presto: coordinator: additionalConfig: [ query.client.timeout=10.00m ]
ただし、ほとんどの場合、これは、クエリを確認してボトルネックを特定し (「 クエリのボトルネックの検出 」を参照)、クエリパフォーマンスを改善するアクションを実行する必要があることを示す兆候です。
hive-metastore:9083: java.net.SocketTimeoutException: Read timed out
- 原因
読み込みタイムアウトは、メタストアへのクエリで、おそらくクエリで使用しているテーブルのサイズが非常に大きいか、パーティションが多すぎるために発生します。
- 解決策
タイムアウトエラーが一部のクエリのみで発生する場合、
values.yaml
ファイルでメタストアリクエストタイムアウトの値を増やすことができます。presto hive hiveMetastoreTimeout=60s delta hiveMetastoreTimeout=60s iceberg hiveMetastoreTimeout=69s
タイムアウトエラーがすべてのクエリで発生する場合、Presto ポッドから Hive メタストアポッドへのコネクションを確認します。
Error fetching next ... returned an invalid response: JsonResponse{statusCode=500, statusMessage=Server Error, headers={connection=[close]}, hasValue=false} [Error: ]'
- 原因
これは、HTTP ヘッダーサイズがその制限を超過していることを意味します。デフォルト値は
4kB
です。- 解決策
必要に応じて、
values.yaml
で MPP コーディネーターと MPP ワーカーの HTTP ヘッダー制限の値を 64 kB 以上に増やしてhelm upgrade prestocluster prestocluster/
を実行し、構成変更をクラスタに適用することができます。presto: coordinator: additionalConfig: [ http-server.max-request-header-size=64kB, http-server.max-response-header-size=64kB ] worker: additionalConfig: [ http-server.max-request-header-size=64kB, http-server.max-response-header-size=64kB ]
org.apache.parquet.io.PrimitiveColumnIO cannot be cast to class org.apache.parquet.io.GroupColumnIO
- 原因
組み込み MPP が複雑/複合構造の Hive テーブルを読み込みましたが、その Hive テーブルのスキーマが Parquet スキーマと互換性がありません。
- 解決策
Parquet ファイルのスキーマを確認し、組み込み MPP の Hive テーブルで宣言されているスキーマと比較します。Parquet ファイルのスキーマを検査するツールは複数存在します。
parquet-tools
は最もよく使われるツールの 1 つです。
Unable to establish connection: Unrecognized connection property 'protocols'
- 原因
Denodo が読み込んでいる Presto ドライバーが古いバージョンです。
- 解決策
$DENODO_HOME/lib/extensions/jdbc-drivers/presto-0.1x
から Presto ドライバーのバックアップを削除し、presto-jdbc.jar
だけを残します。