ストラグラーとは、作業の同時進行を妨げることで、Dataflow ジョブの速度を低下させる作業項目です。
バッチ パイプラインの場合、ストラグラーは次の特性を持つ作業アイテムとして定義されます。
- 同じステージ内の他の作業アイテムよりも、完了までに非常に長い時間がかかる。
- ステージ内の並列処理を軽減する。
- 新しい処理を最初からブロックする。
最悪のケースでは、ストラグラーが作業の完了を一部ブロックしているため、ステージを完了できなくなります。
Dataflow は、バッチジョブで発生するストラグラーを検出します。Dataflow がストラグラーを検出すると、ストラグラーの原因の特定も試みます。
Google Cloud コンソールでストラグラーを表示する
Dataflow ジョブを開始した後、Google Cloud コンソールを使用して、検出されたストラグラーを表示できます。
ストラグラーは、ステージ別またはワーカー別に表示できます。このビューを使用して、ストラグラーがあるステージを探し、各ステージ内でストラグラーが発生したワーカーを特定します。
ステージごとにストラグラーを表示する
ステージごとにストラグラーを表示するには:
Google Cloud コンソールで、Dataflow の [ジョブ] ページに移動します。
ジョブの名前をクリックします。
ジョブの詳細ページで、[実行の詳細] タブをクリックします。
[グラフ表示] リストで、[ステージの進捗状況] を選択します。進捗状況グラフには、各ステージ内で検出されたすべてのストラグラーの集計数が表示されます。
ステージの詳細を表示するには、ステージのバーにカーソルを合わせます。ステージのワーカーを表示するには、詳細パネルで [ワーカーを表示] をクリックします。
ワーカーごとにストラグラーを表示する
ワーカーごとにストラグラーを表示するには:
Google Cloud コンソールで、Dataflow の [ジョブ] ページに移動します。
ジョブの名前をクリックします。
ジョブの詳細ページで、[実行の詳細] タブをクリックします。
[グラフ表示] リストで、[ワーカーの進捗状況] を選択します。
[ステージでワーカーをフィルタ] リストで、ステージを選択します。進捗状況グラフには、そのステージで検出されたストラグラーが表示されます。ストラグラーが最初に検出されたポイントはバーの色が濃くなっています。
ワーカーの詳細を表示するには、ワーカーのバーの上にポインタを置きます。
[ステージ情報] パネルの [ストラグラーの詳細] セクションには、ページに表示されるすべてのワーカーのストラグラーが次の情報とともに一覧表示されます。
- ストラグラーが検出された開始時刻。
- ストラグラーを経験したワーカー。
- 原因(判明している場合)。
バッチ ストラグラーのトラブルシューティング
Dataflow は、バッチ パイプラインでストラグラーの次の原因を検出します。
ホットキーホットキーは、同じ
PCollection
内の他のキーよりもはるかに多くの要素を表すキーです。詳細については、このドキュメントのホットキーによるストラグラーのトラブルシューティングをご覧ください。低速ワーカー。低速ワーカーでは、作業アイテムの実行が通常より遅くなります。多くの場合、低速ワーカーの処理速度は、同じステージで同様の作業を行うワーカーよりも遅くなります。ワーカーの速度低下は、CPU の不足、スラッシング、マシン アーキテクチャ、ワーカー プロセスの停滞など、さまざまな要因で発生する可能性があります。速度が低下すると、Dataflow は問題を自動的に緩和しようとします。詳細については、このドキュメントの低速ワーカーによるストラグラー自動的に軽減するをご覧ください。
原因不明。原因不明のストラグラーについては、「遅いジョブや停止したジョブのトラブルシューティング」の遅いバッチジョブの一般的なトラブルシューティング手順をご覧ください。
ホットキーに起因するストラグラーのトラブルシューティング
さまざまな要因によってストラグラーが発生する可能性がありますが、一般的な原因の一つホットキーの存在です。ホットキーは、同じ PCollection
内の他のキーよりもはるかに多くの要素を表すキーです。ホットキーは、Dataflow の要素の並列処理能力が制限されているため、ストラグラーを作成できます。
Dataflow がホットキーによるストラグラーを検出した場合、[ストラグラーの詳細] パネルに Hot Key
が原因として表示されます。
デフォルトでは、Dataflow はホットキーのキー値を表示しません。Key-Value を表示するには、ジョブの実行時に hotKeyLoggingEnabled
パイプライン オプションを true
に設定します。
この問題を解決するには、データが均等に分散されていることを確認します。キーの値が多すぎる場合は、次の一連のアクションを検討してください。
- データを再入力します。
ParDo
変換を適用して、新しい Key-Value ペアを出力します。 - Java ジョブでは、
Combine.PerKey.withHotKeyFanout
変換を使用します。 - Python ジョブでは、
CombinePerKey.with_hot_key_fanout
変換を使用します。 - Dataflow Shuffle を有効にします。
たとえば、パイプラインが SQL 変換の一部として JOIN
オペレーションを実行する場合、不均衡な量のデータを含むキーが GroupByKey
にフィードされ、展開された JOIN
オペレーションの一部として実行される可能性があります。
詳しくは、機能リクエスト beam-issue/28186 をご覧ください。
低速のワーカーによって生じるストラグラーを自動的に軽減する
低速ワーカーは Dataflow では一般的ではありませんが、ジョブのパフォーマンスに影響を与える可能性があります。パフォーマンスの問題を防ぐため、低速ワーカーを検出すると、Dataflow はワーカーでストラグラーが発生する前に問題を軽減しようとします。
自動緩和は、ホスト メンテナンス イベントをシミュレートします。このイベントは、定期的に発生する Compute Engine のメンテナンス メカニズムです。ワーカーのホスト メンテナンス ポリシーに応じて、ワーカーはライブ マイグレーションまたは再起動されます。ライブ マイグレーションの場合、ワークロードは中断されません。ワーカーが再起動されると、低速ワーカーからの進行中の作業が失われ、処理が再起動されます。
低速ワーカーが検出され、自動的に軽減された場合、ジョブ メッセージ ログに次のメッセージが記録されます。
Slow worker ... detected and automatically remediated ...
低速ワーカーはストラグラーでないため、これ以上のアクションは必要ありません。
自動緩和に失敗した場合、低速ワーカーにより、Dataflow モニタリング インターフェースにストラグラーが表示されます。
プロジェクトで、インスタンス シミュレート メンテナンス イベント リクエストの割り当てが不足している場合、自動緩和は失敗することがあります。デフォルトの割り当ての詳細については、「リソース使用量の割り当てと権限の管理」のリージョン指標の API レート制限をご覧ください。割り当て上限の引き上げをリクエストするには、「割り当ての表示と管理」の割り当て上限の引き上げをリクエストするをご覧ください。
次のステップ
- Dataflow モニタリング インターフェースの使用方法を学習する。
- モニタリング インターフェースの [実行の詳細] タブを理解する。