このページでは、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
クラスタ プロパティの値を増やします。デフォルト値は256
MB です。
ジョブのレート上限を超えました
スケジューラ メッセージ:
Throttling job xxx__JOBID___xxx (and maybe others): Rate limit
原因:
Dataproc エージェントがジョブ送信レートの上限に達しました。
ソリューション:
- デフォルトでは、Dataproc エージェントへのジョブ送信は以下
1.0 QPS
に制限されています。これは、dataproc:dataproc.scheduler.job-submission-rate
クラスタ プロパティでクラスタを作成するときに別の値に設定できます。 。
ジョブのステータスを表示する。
ジョブのステータスと詳細を表示するには、ジョブのモニタリングとデバッグをご覧ください。