このページでは、Dataproc ジョブのスケジュール設定の遅延の一般的な原因と、それらを回避するために役立つ情報を示します。
概要
Dataproc ジョブが遅延(スロットリング)される一般的な理由は次のとおりです。
- 実行中のジョブが多すぎる
- システムメモリ使用量が多い
- 空きメモリが不足している
- レート制限を超過した
通常、ジョブ遅延メッセージは次の形式で出力されます。
Awaiting execution [SCHEDULER_MESSAGE]"
以降のセクションでは、特定のジョブ遅延シナリオの考えられる原因と解決策について説明します。
実行中のジョブが多すぎる
スケジューラ メッセージ:
Throttling job ### (and maybe others): Too many running jobs (current=xx max=xx)
原因:
マスター VM メモリに基づく同時実行ジョブの最大数を超えています(ジョブドライバは Dataproc クラスタ マスター VM で実行されます)。デフォルトでは、Dataproc はアプリケーション用に 3.5 GB のメモリを予約し、GB あたり 1 つのジョブを許可します。
例: n1-standard-4 マシンタイプには 15GB メモリがあります。3.5GB がオーバーヘッド用に予約されているため、11.5GB が残ります。整数に切り捨てられ、11GB は最大 11 個の同時実行ジョブで使用できます。
解決策:
- CPU 使用率やメモリなど、ログ指標をモニタリングして、ジョブ要件を推定します。 
- ジョブクラスタを作成する際: - クラスタ マスター VM には、より大きなメモリ マシンタイプを使用します。 
- ジョブあたりの - 1GBが必要以上の場合は、- dataproc:dataproc.scheduler.driver-size-mbクラスタ プロパティを- 1024未満に設定します。
- dataproc:dataproc.scheduler.max-concurrent-jobsクラスタ プロパティを、ジョブ要件に適した値に設定します。
 
システムメモリ量が多いか、空き容量が不足しています
スケジューラ メッセージ:
Throttling job xxx_____JOBID_____xxx (and maybe others): High system memory usage (current=xx%)
Throttling job xxx_____JOBID_____xxx (and maybe others): Not enough free memory (current=xx min=xx)
原因:
デフォルトでは、メモリ使用量が 90% に達すると Dataproc エージェントがジョブ送信を抑制します。(0.9)。この上限に達すると、新しいジョブをスケジュールできなくなります)
クラスタで別のジョブのスケジュールを設定するのに必要な空きメモリ量が不足しています。
解決方法:
- クラスタを作成する際に以下を行います。 - dataproc:dataproc.scheduler.max-memory-usedクラスタ プロパティの値を増やします。 たとえば、- 0.90のデフォルトより上の- 0.95に設定します。
- dataproc.scheduler.min-free-memory.mbクラスタ プロパティの値を増やします。デフォルト値は- 256MB です。
 
ジョブのレート上限を超えました
スケジューラ メッセージ:
Throttling job xxx__JOBID___xxx (and maybe others): Rate limit
原因:
Dataproc エージェントがジョブ送信レートの上限に達しました。
解決策:
- デフォルトでは、Dataproc エージェントへのジョブ送信は以下 1.0 QPSに制限されています。これは、dataproc:dataproc.scheduler.job-submission-rateクラスタ プロパティでクラスタを作成するときに別の値に設定できます。
ジョブのステータスを表示する
ジョブのステータスと詳細を表示するには、ジョブのモニタリングとデバッグをご覧ください。