このページでは、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 のメモリを予約し、1 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
クラスタ プロパティでクラスタを作成するときに別の値に設定できます。 。
ジョブのステータスを表示する。
ジョブのステータスと詳細を表示するには、ジョブのモニタリングとデバッグをご覧ください。