ストラグラーとは、作業の同時進行を妨げることで、Dataflow ジョブの速度を低下させる作業項目です。
ストラグラーは以下の特性を持つ作業アイテムです。
- 同じステージ内の他の作業アイテムよりも、完了までに非常に長い時間がかかる。
- ステージ内の並列処理を軽減する。
- 新しい処理を最初からブロックする。
最悪のケースでは、ストラグラーが作業の完了を一部ブロックしているため、ステージを完了できなくなります。
Dataflow は、バッチジョブで発生するストラグラーを検出します。Dataflow がストラグラーを検出すると、ストラグラーの原因の特定も試みます。
Dataflow モニタリング インターフェースでストラグラーを表示する
Dataflow ジョブを開始した後、Google Cloud コンソールを使用して、検出されたストラグラーを表示できます。
ストラグラーは、ステージ別またはワーカー別に表示できます。このビューを使用して、ストラグラーがあるステージを探し、各ステージ内でストラグラーが発生したワーカーを特定します。
ステージごとにストラグラーを表示する
ステージごとにストラグラーを表示するには:
Google Cloud コンソールで、Dataflow の [ジョブ] ページに移動します。
ジョブの名前をクリックします。
ジョブの詳細ページで、[実行の詳細] タブをクリックします。
[グラフ表示] リストで、[ステージの進捗状況] を選択します。進捗状況グラフには、各ステージ内で検出されたすべてのストラグラーの集計数が表示されます。
ステージの詳細を表示するには、ステージのバーにカーソルを合わせます。ステージのワーカーを表示するには、詳細パネルで [ワーカーを表示] をクリックします。
ワーカーごとにストラグラーを表示する
ワーカーごとにストラグラーを表示するには:
Google Cloud コンソールで、Dataflow の [ジョブ] ページに移動します。
ジョブの名前をクリックします。
ジョブの詳細ページで、[実行の詳細] タブをクリックします。
[グラフ表示] リストで、[ワーカーの進捗状況] を選択します。
[ステージでワーカーをフィルタ] リストで、ステージを選択します。進捗状況グラフには、そのステージで検出されたストラグラーが表示されます。ストラグラーが最初に検出されたポイントはバーの色が濃くなっています。
ワーカーの詳細を表示するには、そのワーカーのバーにカーソルを合わせます。
[ステージ情報] パネルの [ストラグラーの詳細] セクションには、ページに表示されるすべてのワーカーのストラグラーが次の情報とともに一覧表示されます。
- ストラグラーが検出された開始時刻。
- ストラグラーを経験したワーカー。
- 原因(判明している場合)。
ストラグラーのトラブルシューティング
Dataflow がストラグラーの主な原因を検出します。
ホットキーホットキーは、同じ
PCollection
内の他のキーよりもはるかに多くの要素を表すキーです。詳細については、このドキュメントのホットキーによるストラグラーのトラブルシューティングをご覧ください。原因不明。原因不明のストラグラーについては、パイプラインのトラブルシューティングとデバッグのドキュメントで遅いバッチジョブの一般的なトラブルシューティングの手順をご覧ください。
ホットキーに起因するストラグラーのトラブルシューティング
さまざまな要因によってストラグラーが発生する可能性がありますが、一般的な原因の一つホットキーの存在です。ホットキーは、同じ 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 を有効にします。
次のステップ
- Dataflow モニタリング インターフェースの使用方法を学習する。
- モニタリング インターフェースの [実行の詳細] タブを理解する。