バッチジョブの Dataflow Shuffle

バッチジョブは、デフォルトで Dataflow Shuffle を使用します。Dataflow Shuffle は、シャッフル オペレーションをワーカー VM から Dataflow サービスのバックエンドに移動します。

Dataflow Shuffle について

  • Dataflow Shuffle は、GroupByKeyCoGroupByKeyCombine などの Dataflow 変換の背後で行われる基本オペレーションです。
  • Dataflow Shuffle オペレーションは、スケーラブルで効率的、かつフォールト トレラントな方法で、キーごとにデータを分割およびグループ化します。

Dataflow Shuffle の利点

サービスベースの Dataflow Shuffle には、次の利点があります。

  • パイプライン ジョブタイプの大部分で、バッチ パイプラインの実行時間が短縮されます。
  • ワーカー VM 上の CPU、メモリ、Persistent Disk ストレージ リソースの消費量が削減されます。
  • VM はシャッフル データを保持しないため、早期にスケールダウンが可能なので、水平自動スケーリングがより適切に行われます。
  • Dataflow Shuffle のデータを保持する VM の異常によってジョブ全体が失敗することがないため、フォールト トレランスが強化されます。

サポートと制限事項

  • Dataflow Shuffle は、ストリーミング ジョブでは使用できません。
  • この機能は、Dataflow がサポートされているすべてのリージョンで使用できます。使用可能なロケーションを確認するには、Dataflow のロケーションをご覧ください。パフォーマンスはリージョンによって異なる場合があります。
  • ワーカーは Dataflow ジョブと同じリージョンにデプロイする必要があります。
  • zone パイプライン オプションは指定しないでください。代わりに region を指定し、値を使用可能なリージョンのいずれかに設定します。Dataflow は、指定されたリージョンのゾーンを自動的に選択します。

    zone パイプライン オプションを指定し、使用可能なリージョンの外部のゾーンに設定すると、Dataflow ジョブはエラーを返します。regionzone に互換性のない組み合わせを設定すると、ジョブは Dataflow Shuffle を使用できません。

  • Python の場合、Dataflow Shuffle には Apache Beam SDK for Python バージョン 2.1.0 以降が必要です。

ディスクサイズについての考慮事項

各バッチジョブのデフォルトのブートディスク サイズは 25 GB です。バッチジョブによっては、ディスクサイズを変更する必要があります。次の点を考慮してください。

  • ワーカー VM は 25 GB のディスク容量の一部をオペレーティング システム、バイナリ、ログ、コンテナに使用します。Dataflow Shuffle を使用するとき、大量のディスク容量を使用するジョブが残りのディスク容量を使い果たして失敗することがあります。
  • 小さなディスクのパフォーマンスにより、ディスク I/O を大量に使用するジョブは処理に時間がかかることがあります。ディスクサイズごとのパフォーマンスの違いについて詳しくは、Compute Engine Persistent Disk のパフォーマンスをご覧ください。

Dataflow Shuffle ジョブに、より大きなディスクサイズを指定するには、--disk_size_gb パラメータを使用します。

料金

ワーカー リソースの削減のほとんどは、シャッフル作業を Dataflow サービスにオフロードすることで発生します。そのため、Dataflow Shuffle の使用に関する料金がかかります。実行時間はそのつど異なります。重要な期限があるパイプラインを実行している場合は、期限までに十分なバッファ時間を割り当てることをおすすめします。