tencent cloud

Data Lake Compute

製品概要
プロダクト概要
製品の強み
適用シーン
購入ガイド
課金概要
返金説明
支払い期限切れ説明
設定調整費用の説明
クイックスタート
新規ユーザー開通フルプロセス
DLC データインポートガイド
DLCデータ分析の1分間入門
DLC権限管理の1分間入門
パーティションテーブル1分間入門
データ最適化をオンにする
クロスソース分析 EMR Hive データ
標準エンジン構成ガイド
操作ガイド
コンソール操作紹介
開発ガイド
実行環境
SparkJar ジョブ開発ガイド
PySparkジョブ開発ガイド
「クエリパフォーマンス最適化ガイド」
UDF 関数開発ガイド
システム制約
クライアントアクセス
JDBCアクセス
TDLC コマンドラインツールにアクセス
サードパーティソフトウェア連携
Python にアクセス
実践チュートリアル
DLC を Power BI に接続
テーブル作成の実践
Apache Airflowを使用してDLCエンジンのタスクをスケジュールして送信する
StarRocks は DLC 内部ストレージを直接クエリします
Spark の計算コスト最適化プラクティス
DATA + AI
ロールSSOを使用してDLCにアクセスする
SQL構文
SuperSQL構文
標準 Spark 構文概要
標準 Presto 構文の概要
予約語
API Documentation
History
Introduction
API Category
Making API Requests
Data Table APIs
Task APIs
Metadata APIs
Service Configuration APIs
Permission Management APIs
Database APIs
Data Source Connection APIs
Data Optimization APIs
Data Engine APIs
Resource Group for the Standard Engine APIs
Data Types
Error Codes
一般クラスリファレンス
エラーコード
クォータと制限
サードパーティソフトウェアでDLCに接続する操作ガイド
よくあるご質問
権限に関するよくあるご質問
エンジン類のよくある質問
機能に関するよくあるご質問
Sparkジョブクラスに関するよくある質問
DLC ポリシー
プライバシーポリシー
データプライバシーとセキュリティ契約
お問い合わせ
ドキュメントData Lake Computeよくあるご質問Sparkジョブクラスに関するよくある質問

Sparkジョブクラスに関するよくある質問

PDF
フォーカスモード
フォントサイズ
最終更新日: 2025-12-26 17:35:44

PySparkタスクのデータスキューにより、python+jvmのメモリ使用量がK8sのrequestを超過し、OOMkilledが発生しましたか?

問題の説明:PySparkタスク実行時に、executorログに「k8sがOOMKiiledを実行」と表示され、使用メモリがk8sの制限メモリを超えています。
原因分析:K8sが申請するメモリは、SparkエグゼキュータのメモリにmemoryOerheadFactorを乗じて計算されます。Pythonで処理するデータに偏りがある場合、または単一のデータが大きすぎる場合、使用メモリがK8sに割り当てられたメモリを超える可能性があります。
ソリューション:タスクパラメータに spark.kubernetes.memoryOverheadFactor=0.8 を追加します。デフォルト値は0.4です。
操作手順:DLCコンソールにログインし、データジョブ(Sparkジョブ)> ジョブの編集に進み、以下のように設定します:




「Insert into/overwrite」後に自動的にrepartitionコマンドを追加してデータをパーティション分割し、小ファイルの数を減らすにはどうすればよいですか?

ソリューション:自動リパーティションを有効にし、以下のパラメータを設定します:
spark.sql.adaptive.enabled:true
spark.sql.adaptive.insert.repartition:true
spark.sql.adaptive.insert.repartition.forceNum:300 (具体的なパーティション数を指定します)
操作手順:
プログラム内でSparkConfに設定します:



プログラム内でSQL SETを設定します:




PySparkタスクが高並列でCOSストレージバケットに書き込む際に503エラーが返されますか?

問題の説明:PySparkタスクが高並列でCOSストレージバケットに書き込む際に、executorが非常に多くのCOSからの503エラーを返します。
問題の原因:SparkタスクがCOSに書き込む際の並列コア数は*fs.cosn.trsf.fs.ofs.data.transfer.thread.countで指定されます。例えば、4096コアの場合、チューニングを行わないとデフォルトの並列度は4096*32=131072となり、COSのボトルネックを引き起こします。
ソリューション:
1. COSに新しいメタデータアクセラレーションバケットを作成し、sparkタスクの書き込み時のリストとリネームの過負荷を防ぎます。
2. COSのメタデータ高速化バケットの帯域幅制限を調整します。
3. タスクに以下のパラメータを追加し、高並列度時のCOSへのアクセス負荷を軽減します。
fs.cosn.trsf.fs.ofs.data.transfer.thread.count=8
fs.cosn.trsf.fs.ofs.block.max.file.cache.mb=0
spark.hadoop.fs.cosn.trsf.fs.ofs.data.transfer.thread.count=8
spark.hadoop.fs.cosn.trsf.fs.ofs.block.max.file.cache.mb=0

よく使われるデータガバナンスSQLは何ですか?

ライブラリガバナンスSQLを閉じる
ALTER DATABASE DataLakeCatalog.demo_db
SET
DBPROPERTIES (
'dlc.ao.data.govern.inherit' = 'none',
'dlc.ao.merge.data.enable' = 'disable',
'dlc.ao.expired.snapshots.enable' = 'disable',
'dlc.ao.remove.orphan.enable' = 'disable',
'dlc.ao.merge.manifests.enable' = 'disable'
)
ライブラリガバナンス SQL を有効にする
ALTER DATABASE DataLakeCatalog.db_name
SET
DBPROPERTIES (
'dlc.ao.data.govern.inherit' = 'none',
'dlc.ao.merge.data.enable' = 'enable',
'dlc.ao.merge.data.engine' = 'bda-sinker',
'dlc.ao.merge.data.min-input-files' = '10',
'dlc.ao.merge.data.target-file-size-bytes' = '536870912',
'dlc.ao.merge.data.interval-min' = '90',
'dlc.ao.expired.snapshots.enable' = 'enable',
'dlc.ao.expired.snapshots.engine' = 'bda-sinker',
'dlc.ao.expired.snapshots.retain-last' = '5',
'dlc.ao.expired.snapshots.before-days' = '2',
'dlc.ao.expired.snapshots.max-concurrent-deletes' = '4',
'dlc.ao.expired.snapshots.interval-min' = '150',
'dlc.ao.remove.orphan.enable' = 'enable',
'dlc.ao.remove.orphan.engine' = 'bda-sinker',
'dlc.ao.remove.orphan.before-days' = '3',
'dlc.ao.remove.orphan.max-concurrent-deletes' = '4',
'dlc.ao.remove.orphan.interval-min' = '600',
'dlc.ao.merge.manifests.enable' = 'enable',
'dlc.ao.merge.manifests.engine' = 'bda-sinker',
'dlc.ao.merge.manifests.interval-min' = '1440'
)
テーブルガバナンス SQL をオフにする
ALTER TABLE
`DataLakeCatalog`.`db_name`.`tb_name`
SET
TBLPROPERTIES (
'dlc.ao.data.govern.inherit' = 'none',
'dlc.ao.merge.data.enable' = 'disable',
'dlc.ao.expired.snapshots.enable' = 'disable',
'dlc.ao.remove.orphan.enable' = 'disable',
'dlc.ao.merge.manifests.enable' = 'disable'
)
テーブルガバナンス SQL をオンにする
ALTER TABLE `DataLakeCatalog`.`db_name`.`tb_name`
SET TBLPROPERTIES ('dlc.ao.data.govern.inherit' = 'default')
テーブルガバナンス SQL をオンにする
ALTER TABLE
`DataLakeCatalog`.`db_name`.`tb_name`
SET
TBLPROPERTIES (
'dlc.ao.data.govern.inherit' = 'none',
'dlc.ao.merge.data.enable' = 'enable',
'dlc.ao.merge.data.engine' = 'bda-sinker',
'dlc.ao.merge.data.min-input-files' = '10',
'dlc.ao.merge.data.target-file-size-bytes' = '536870912',
'dlc.ao.merge.data.interval-min' = '90',
'dlc.ao.expired.snapshots.enable' = 'enable',
'dlc.ao.expired.snapshots.engine' = 'bda-sinker',
'dlc.ao.expired.snapshots.retain-last' = '5',
'dlc.ao.expired.snapshots.before-days' = '2',
'dlc.ao.expired.snapshots.max-concurrent-deletes' = '4',
'dlc.ao.expired.snapshots.interval-min' = '150',
'dlc.ao.remove.orphan.enable' = 'enable',
'dlc.ao.remove.orphan.engine' = 'bda-sinker',
'dlc.ao.remove.orphan.before-days' = '3',
'dlc.ao.remove.orphan.max-concurrent-deletes' = '4',
'dlc.ao.remove.orphan.interval-min' = '600',
'dlc.ao.merge.manifests.enable' = 'enable',
'dlc.ao.merge.manifests.engine' = 'bda-sinker',
'dlc.ao.merge.manifests.interval-min' = '1440'
)
Where条件を指定せずに全表を結合するSQL
CALL `DataLakeCatalog`.`system`.`rewrite_data_files`(
`table` => 'tb_name',
`options` => map(
'min-input-files',
'10',
'target-file-size-bytes',
'536870912',
'delete-file-threshold',
'1',
'max-concurrent-file-group-rewrites',
'20'
)
)
Where条件による増分マージSQLをサポート
CALL `DataLakeCatalog`.`system`.`rewrite_data_files`(
`table` => 'tb_name',
`options` => map(
'min-input-files',
'10',
'target-file-size-bytes',
'536870912',
'delete-file-threshold',
'1',
'max-concurrent-file-group-rewrites',
'20'
),
`where` => 'field_date > "2022-01-01" and field_date <= "2023-01-01"'
)
スナップショットの期限切れ SQL
CALL `DataLakeCatalog`.`system`.`expire_snapshots`(
`table` => 'tb_name',
older_than => TIMESTAMP '2023-02-28 16:06:35.000',
retain_last => 1,
max_concurrent_deletes => 4,
stream_results => true
)

SQLの実行計画とSQL実行のログを確認する方法は?

SQLの実行計画を確認する:データ探索でexplainキーワードを使用してSQL実行の物理計画を確認します。explainの詳細な使用方法については、SQL統一構文 > EXPLAINを参照してください。
SQLの実行ログを確認する:
1. データ探索でSQLを実行し、実行結果にSQL実行ログが表示されます。
2. DLC コンソール > データ運用管理 > 実行履歴でSQL実行ログを確認できます。

CASTが自動的に精度を変換しなかったため、データ書き込みに失敗しましたか?

問題の説明:hive sql を spark sql に移行する際に、Cannot safely cast 'class_type': string to bigintというエラーが発生しました。
問題の特定:Spark 3.0.0以降、Spark SQLは型変換を処理する際に3つの安全ポリシーを持っています:
ANSI:Sparkがstringからtimestampへの変換など、一部の不合理な型変換を許可しないようにします。
LEGACY:Sparkが有効なCast操作である限り、型の強制変換を許可します。
STRICT:Sparkが精度損失の可能性がある変換を一切許可しません。デフォルトのポリシーはANSIです。
ソリューション:ポリシーをLEGACYに変更し、spark.sql.storeAssignmentPolicy=LEGACYを設定します。

QUERY_PROGRESS_UPDATE_ERROR(code=3060): ステートメントの進捗状況の更新に失敗しました

問題説明:データ探索でspark sqlタスクを提出した際、実行中に「Failed to Update statement progress」エラーが発生しました。
問題特定:複数のSpark SQLタスクが提出された場合、各SQLの実行進捗を継続的に非同期で追跡する必要がありますが、ここでの非同期処理キューには制限があり、デフォルト値は100です(2024.1.14以降のバージョンでは300に更新されています)。したがって、あるタスクが提出された後ずっと実行が完了せず、後続の新しいタスクがキューの上限を超えると、このエラーが発生します。このエラーが発生した場合、通常はそのSQLタスクがロングテールタスクである可能性を示しており、他のタスクへのリソース占有が適切かどうかを確認する必要があります。
解決策:エンジン上で設定 livy.rsc.retained-statements を調整し、デフォルト値より大きい値に設定できます。調整後、エンジンは再起動します。具体的な値はタスクの並列処理量に基づいて設定でき、このパラメータはクラスターへの影響が小さく、同時に送信されるSQLの並列処理量が100-200/分に達した場合でも、このパラメータを6000に調整しても実測で影響はありませんでした。


ヘルプとサポート

この記事はお役に立ちましたか?

フィードバック