Dataflow ジョブステップの情報

Dataflow モニタリング インターフェースの [ステップ情報] パネルには、ジョブの個々のステップに関する情報が表示されます。ステップとは、パイプライン内の単一の変換のことです。複合変換にはサブステップが含まれます。

[ステップ情報] パネルに表示される情報には以下のものがあります。

  • ステップに関する指標。
  • ステップの入力コレクションと出力コレクションに関する情報。
  • このステップに対応するステージ。
  • 副入力に関する指標。

[ステップ情報] パネルを使うことで、ジョブが各ステップでどのように動作しているかを把握し、最適化できる可能性のあるステップを見つけられます。

ステップ情報を確認する

ステップ情報を表示する手順は次のとおりです。

  1. Google Cloud コンソールで、[Dataflow] > [ジョブ] ページに移動します。

    [ジョブ] に移動

  2. ジョブを選択します。

  3. [ジョブグラフ] タブをクリックして、ジョブグラフを表示します。ジョブグラフでは、パイプラインの各ステップが 1 つのボックスとして表されます。

  4. 任意のステップをクリックします。そのステップに関する情報が [ステップ情報] パネルに表示されます。

  5. 複合変換のサブステップを表示するには、ノードを開くの矢印 をクリックします。

ステップの指標

[ステップ情報] パネルには、ステップに関する以下の指標が表示されます。

システムのウォーターマークとラグ

システム ウォーターマークとは、すべてのイベント時刻が完全に処理された最新のタイムスタンプのことです。システム ウォーターマークのラグとは、データの 1 つの項目が処理を待っている最長時間のことです。

データ ウォーターマークとラグ

データ ウォーターマークとは、このステップでのデータ入力の推定完了日時を示すタイムスタンプのことです。データ ウォーターマーク ラグとは、最新の入力イベント時刻とデータ ウォーターマークとの差分のことです。

経過時間

経過時間とは、すべてのワーカーにおけるすべてのスレッドで次のアクションにかかったおおよその合計時間のことです。

  • ステップの初期化
  • データの処理
  • データのシャッフル
  • ステップの終了

複合ステップの場合、経過時間はコンポーネントのステップにかかった時間の合計です。

経過時間を利用することで、処理が遅いステップを特定したり、パイプライン内で想定以上に時間がかかっている部分を診断したりできます。

最大オペレーション レイテンシ

最大オペレーション レイテンシとは、このステップで受信メッセージやウィンドウの期限切れを処理するのに費やされた最大時間のことです。この指標は、単一ステージに統合されたステップ全体で集計された測定値であるため、値はステージ全体を表しています。

入出力コレクション

[ステップ情報] パネルには、ステップの入力コレクションと出力コレクションのそれぞれについて、次の情報が表示されます。

  • スループット チャート。このチャートは、コレクションのスループットを示しています。1 秒あたりの要素数または 1 秒あたりのバイト数として表示できます。この指標の詳細については、スループットをご覧ください。

  • コレクションに追加された要素の数。

  • コレクションの推定サイズ(バイト単位)。

最適化されたステージ

ステージとは、Dataflow によって実行される単一の作業単位を表したものです。ジョブグラフ内の任意のステップを選択すると、[ステップ情報] パネルに、そのステップを実行するステージの名前と、実行中、停止、成功などの現在のステータスが表示されます。

ジョブのステージに関するより詳細な情報を確認するには、[実行の詳細] タブを使用します。

副入力の指標

副入力とは、変換が各要素を処理するたびにアクセスできる追加の入力のことです。変換処理で副入力が作成または使用される場合、その副入力コレクションに関する指標が [Side Info] パネルに表示されます。

複合変換で副入力が作成または使用されている場合は、その副入力が作成または使用されている特定のサブ変換が表示されるまで、複合変換を開きます。目的のサブ変換を選択すると、副入力に関する指標を確認できます。

副入力を作成する変換

ある変換が副入力コレクションを作成する場合、[副入力の指標] セクションに、そのコレクションの名前と以下の指標が表示されます。

  • [書き込みに要した時間]: 副入力コレクションの書き込みに費やされた実行時間。
  • [書き込みバイト数]: 副入力コレクションに書き込まれた合計バイト数。
  • [副入力からの読み取り時間と読み取りバイト数]: 副入力コレクションを使用するすべての変換(副入力コンシューマ)に関する追加の指標を表示するテーブル。

[副入力からの読み取り時間と読み取りバイト数] テーブルには、副入力コンシューマのそれぞれについて、次の情報が含まれています。

  • [副入力のコンシューマ]: 副入力コンシューマの変換名。
  • [読み取りに要した時間]: 該当するコンシューマが副入力のコレクションの読み取りに費やした時間。
  • [読み取りバイト数]: 該当するコンシューマが副入力コレクションから読み取ったバイト数。

以下の図は、副入力コレクションを作成する変換における副入力の指標を示したものです。

[ステップ情報] パネルに表示される副入力の指標

複合変換が開かれた状態のジョブグラフ(MakeMapView)。副入力を作成するサブ変換(CreateDataflowView)が選択されていて、[ステップ情報] パネルにその副入力の指標が表示されています。

副入力のデータを取り込んで使う変換

ある変換が 1 つ以上の副入力を取り込んで使う場合、[副入力の指標] セクションには [副入力からの読み取り時間と読み取りバイト数] テーブルが表示されます。このテーブルには、副入力コレクションのそれぞれについて、次の情報が含まれています。

  • [副入力のコレクション]: 副入力コレクションの名前。
  • [読み取りに要した時間]: 変換で副入力コレクションの読み取りに費やされた時間。
  • [読み取りバイト数]: 変換で副入力コレクションから読み取ったバイト数。

以下の図は、副入力コレクションから読み取る変換における副入力の指標を示したものです。

[ステップ情報] パネルに表示される副入力の指標

JoinBothCollections 変換は副入力コレクションからデータを読み取ります。ジョブグラフで JoinBothCollections が選択されていて、副入力の指標が [ステップ情報] パネルに表示されています。

副入力のパフォーマンスに関する問題を特定する

副入力はパイプラインのパフォーマンスに影響する可能性があります。パイプラインで副入力を使う場合、Dataflow はそのコレクションをディスクなどの永続的な層に書き込み、変換処理はこの永続的なコレクションから読み取ります。こうした書き込みと読み取りは、ジョブの実行時間に影響を及ぼします。

副入力に関してよく発生するパフォーマンスの問題は、再反復処理です。副入力 PCollection のサイズが大きすぎると、ワーカーはコレクション全体をメモリ内のキャッシュに保存できません。そのため、ワーカーは永続的な副入力コレクションからの読み取りを繰り返さなければならなくなります。

次の図の副入力の指標を見ると、副入力コレクションから読み取られた合計バイト数がコレクションのサイズ(合計書き込みバイト数)より遥かに大きいことがわかります。副入力コレクションのサイズは 563 MB であるのに対し、副入力コレクションを使用する変換で読み取られた合計バイト数は 12 GB 近くになっています。

再反復処理の例

このパイプラインのパフォーマンスを向上させるには、副入力データの反復処置や再取得が回避されるようにアルゴリズムを再設計する必要があります。この例では、パイプラインによって 2 つのコレクションのデカルト積が生成されています。これは、アルゴリズムでメインのコレクションに含まれる要素ごとに、副入力コレクション全体が反復処理されているためです。したがって、メインのコレクションに含まれる複数の要素をまとめてバッチ処理することで、パイプラインのアクセス パターンを改善できます。このように変更すると、ワーカーが副入力コレクションを再読み取りしなければならない回数が減ります。

パイプラインで結合を実行するために、1 つ以上のサイズの大きい副入力で ParDo を適用すると、別の一般的なパフォーマンス問題が発生することがあります。この場合、ワーカーは結合オペレーションの処理時間の大部分を副入力コレクションからの読み取りに費やします。

次の図は、この問題に関する副入力の指標を示しています。

コストの高い副入力結合の例

JoinBothCollections 変換の合計処理時間が 18 分を超えています。ワーカーは処理時間の大半(10 分)をサイズ 10 GB の副入力コレクションの読み取りに費やしています。このパイプラインのパフォーマンスを高めるには、副入力の代わりに CoGroupByKey を使用します。