Dataflow Shuffle は、GroupByKey
、CoGroupByKey
、Combine
などの Dataflow 変換の背後で行われる基本オペレーションです。Dataflow Shuffle オペレーションは、スケーラブルで効率的、かつフォールト トレラントな方法で、キーごとにデータを分割およびグループ化します。バッチ パイプラインのみで利用可能な Dataflow Shuffle 機能では、シャッフル オペレーションがワーカー VM から Dataflow サービスのバックエンドに移動されます。
バッチジョブは、デフォルトで Dataflow Shuffle を使用します。
Dataflow Shuffle の利点
サービスベースの Dataflow Shuffle には、次の利点があります。
- パイプライン ジョブタイプの大部分で、バッチ パイプラインの実行時間が短縮されます。
- ワーカー VM 上の CPU、メモリ、永続ディスク ストレージ リソースの消費量が削減されます。
- VM はシャッフル データを保持せず、そのため早めにスケールダウンが可能になるため、水平自動スケーリングがより適切に行われます。
- フォールト トレランスが強化されます。この機能を使用しない場合、Dataflow Shuffle データを保持する VM に異常が発生するとジョブ全体が失敗しますが、この機能を使用すればそのようなことはありません。
ワーカー リソースの削減のほとんどは、シャッフル作業を Dataflow サービスにオフロードすることにあります。そのため、Dataflow Shuffle の使用に関する料金がかかります。実行時間はそのつど異なります。重要な期限があるパイプラインを実行している場合は、期限までに十分なバッファ時間を割り当てることをおすすめします。
Dataflow Shuffle を使用する
この機能は、Dataflow がサポートされているすべてのリージョンで使用できます。使用可能なロケーションを確認するには、Dataflow のロケーションをご覧ください。Dataflow Shuffle を使用する場合は、ワーカーを Dataflow ジョブと同じリージョンにデプロイする必要があります。
Java
パイプラインに Dataflow Shuffle を使用する場合は、zone
パイプライン オプションを指定しないでください。代わりに region
を指定し、値を使用可能なリージョンのいずれかに設定します。Dataflow は、指定されたリージョンのゾーンを自動的に選択します。zone
パイプライン オプションを指定し、使用可能なリージョンの外部のゾーンにそれを設定すると、Dataflow からエラーが報告されます。region
と zone
に互換性のない組み合わせを設定した場合、ジョブは Dataflow Shuffle を使用できません。
Python
パイプラインに Dataflow Shuffle を使用する場合は、zone
パイプライン オプションを指定しないでください。代わりに region
を指定し、値を使用可能なリージョンのいずれかに設定します。Dataflow は、指定されたリージョンのゾーンを自動的に選択します。zone
パイプライン オプションを指定し、使用可能なリージョンの外部のゾーンにそれを設定すると、Dataflow からエラーが報告されます。region
と zone
に互換性のない組み合わせを設定した場合、ジョブは Dataflow Shuffle を使用できません。
Go
パイプラインに Dataflow Shuffle を使用する場合は、zone
パイプライン オプションを指定しないでください。代わりに region
を指定し、値を使用可能なリージョンのいずれかに設定します。Dataflow は、指定されたリージョンのゾーンを自動的に選択します。zone
パイプライン オプションを指定し、使用可能なリージョンの外部のゾーンにそれを設定すると、Dataflow からエラーが報告されます。region
と zone
に互換性のない組み合わせを設定した場合、ジョブは Dataflow Shuffle を使用できません。
各バッチジョブのデフォルトのブートディスク サイズは 25 GB です。バッチジョブによっては、ディスクサイズを変更する必要があります。次の点を考慮してください。
- ワーカー VM は 25 GB のディスク容量の一部をオペレーティング システム、バイナリ、ログ、コンテナに使用します。Dataflow Shuffle を使用する場合、大量のディスク容量を使用するジョブが残りのディスク容量を使い果たして失敗することがあります。
- ディスクサイズが小さいと、ディスク I/O を大量に使用するジョブに時間がかかることがあります。ディスクサイズごとのパフォーマンスの違いについて詳しくは、Compute Engine Persistent Disk のパフォーマンスをご覧ください。
Dataflow Shuffle ジョブにより大きなディスクサイズを指定するには、--disk_size_gb
パラメータを使用します。