データ接続と統合パイプラインの最適化パイプラインのデバッグメモリ不足(OOM)エラーのトラブルシューティング

注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。

メモリー不足(OOM)エラーをトラブルシューティングする

ジョブでメモリー不足エラーが発生すると、次のような形で表示されることがあります。

  • 「Job aborted due to stage failure」 と表示される
  • 「ExecutorLostFailure」 と表示される
  • **「Spark module died while job [jobID] was using it. (ExitReason: MODULE_UNREACHABLE)」**と表示される
  • 「Connection lost to driver」 と表示される

これらのエラーメッセージは、このビルドで許可されている最大メモリー容量を超えたことを示します。通常、これはプラットフォームの障害ではなく、プラットフォームに実行を要求したビルドの問題です。ビルドの実行に必要なメモリーを削減するために、いくつかの対策を実施できます。

トラブルシューティングするには、次の手順を実施します。

  • トランスフォームが Python または Pandas で記述されている場合:
    • コンピュートクラスター全体の処理能力を活用するために、計算処理をできる限り PySpark に移します。生の Python と Pandas のロジックは、ドライバー内の単一のプロセッサーで実行されます。このプロセッサーは、お使いのノートパソコンよりも低速である可能性があります。
  • トランスフォームで結合を使用している場合:
    • 「null 結合」、つまり多くの行の値が null である列に対する結合がないか確認します。これにより、結合のメモリー使用量が大幅に増加することがあります。この問題を解消するには、トランスフォーム内または前段のトランスフォームで、問題のある列の null 値を絞り込みによって除外できます。
    • 出力データセットの行数を大幅に増加させる結合がないか確認し、それが必要かどうかを確認します。対策の1つとして、データセットのキーごとの行数と結合後の行数を計算する分析を実行できます。
    • チェックポイントを設定できる再帰的な結合がないか確認します。単一のテーブルに対して結合を繰り返すと、クエリプランが急速に大きくなります。これを防ぐには、チェックポイントを使用して中間結果をキャッシュします。
  • 入力データセット内のファイルサイズを確認します。(データセット → 詳細 → ファイル → データセットファイル)。各ファイルは少なくとも 128 MB 必要です。小さすぎる場合や大きすぎる場合は、再パーティション化する必要があります。
  • トランスフォームをより小さな複数のトランスフォームに分割します。これにより、トランスフォームのどの部分が失敗の原因になっているかを特定しやすくなります。
  • Spark がメモリー内に保持する必要のあるデータ量を削減するために、入力データセットから不要な列を削除するか、データセットを事前に絞り込んで不要な行を削除します。
  • 可能であれば、トランスフォームのロジックを簡素化します。
  • コードの最適化だけではジョブを正常にビルドできない場合、追加のリソースを割り当てることができます。ただし、これによりビルドに伴うコンピュートコストが増加する可能性があります。追加のリソースの割り当てについて詳しくは、次を参照してください。