Dataflow サービスは、Google Cloud のリソースをジョブごとに完全に管理します。これには Compute Engine インスタンス(workers
または VMs
とも呼ばれる)の起動と停止、I/O と一時ファイル ステージングの両方に対するプロジェクトの Cloud Storage バケットへのアクセスが含まれます。ただし、パイプラインで BigQuery や Pub/Sub などの Google Cloud データ ストレージ テクノロジーを操作する場合は、こうしたサービスのリソースと割り当てを管理する必要があります。
Dataflow は、ユーザーが提供する Cloud Storage 内の場所をファイルのステージングに使用します。この場所はユーザーの制御下にあり、ジョブがそこから読み取る限り、場所の有効性が維持されることを確認する必要があります。SDK の組み込みキャッシュはジョブの開始時間を短縮できるため、複数のジョブ実行に同じステージング場所を再利用できます。
Jobs
Google Cloud プロジェクトあたり 25 個までの Dataflow ジョブを同時に実行できます。ただし上限の引き上げは、Google Cloud サポートに連絡して行います。詳しくは、割り当てをご覧ください。
Dataflow サービスは現在、20 MB 以下のサイズの JSON ジョブ リクエストの処理に限定されています。ジョブ リクエストのサイズはパイプラインの JSON 表現に関連付けられています。パイプラインが大きいほど、リクエストが大きくなります。
パイプラインの JSON リクエストのサイズを見積もるには、次のオプションを指定してパイプラインを実行します。
Java
--dataflowJobFile=<path to output file>
Python
--dataflow_job_file=<path to output file>
Go
現在 Go では、フラグを使用したジョブの JSON ペイロードのサイズの見積もりはサポートされていません。
このコマンドは、ジョブの JSON 表現をファイルに書き込みます。シリアル化されたファイルのサイズは、リクエストのサイズの適切な推定値となります。リクエストにはいくつかの追加情報が含まれるので、実際のサイズはわずかに大きくなります。
詳細については、「413 Request Entity Too Large」(413 リクエスト エンティティが大きすぎます)/「The size of serialized JSON representation of the pipeline exceeds the allowable limit」(パイプラインのシリアル化 JSON 表現のサイズが上限を超えています)のトラブルシューティング ページをご覧ください。
また、ジョブのグラフサイズが 10 MB を超えないようにする必要があります。詳細については、「The job graph is too large. Please try again with a smaller job graph, or split your job into two or more smaller jobs.」(ジョブグラフが大きすぎます。小さいジョブグラフでもう一度試すか、ジョブを複数の小さいジョブに分割してください)のトラブルシューティング ページをご覧ください。
ワーカー
Dataflow サービスでは、現在最大でジョブあたり 1,000 個の Compute Engine インスタンスが許可されます。バッチジョブの場合、デフォルトのマシンタイプは n1-standard-1
です。ストリーミング ジョブの場合、Streaming Engine 対応ジョブのデフォルトのマシンタイプは n1-standard-2
で、非 Streaming Engine ジョブのデフォルトのマシンタイプは n1-standard-4
です。デフォルトのマシンタイプを使用する場合、Dataflow サービスはジョブあたり最大 4,000 コアを割り当てることができます。より多くのコアが必要なジョブの場合は、より大きなマシンタイプを選択できます。
Compute Engine マネージド インスタンス グループに対して管理やその他の操作を直接行わないでください。Dataflow サービスがそれを行います。Dataflow ジョブに関連付けられた Compute Engine リソースの手動変更は、サポートされない操作です。
使用可能な任意の Compute Engine マシンタイプ ファミリーまたはカスタム マシンタイプを使用できます。n1
マシンタイプを使用すると最適な結果が得られます。f1
や g1
シリーズのワーカーなどの共有コア マシンタイプは、Dataflow のサービスレベル契約ではサポートされません。
ワーカー スレッドごとに追加のメモリを割り当てるには、拡張メモリを備えたカスタム マシンタイプを使用します。たとえば、custom-2-15360-ext
は 2 つの CPU と 15 GB のメモリを備えた n1
マシンタイプです。Dataflow は、マシン内の CPU 数を考慮して、ワーカー VM あたりのワーカー スレッドの数を決定します。パイプラインでメモリ使用量の多い作業を処理する場合、拡張メモリを含むカスタム マシンタイプを使用すると、ワーカー スレッドごとに提供するメモリの量を増やすことができます。詳細については、カスタム VM インスタンスの作成をご覧ください。
Dataflow は、vCPU の数とワーカーのメモリの GB 数によって課金されます。 請求はマシンタイプ ファミリーとは独立しています。 パイプラインの作成時に適切な実行パラメータを設定することで、パイプラインのマシンタイプを指定できます。
Java
マシンタイプを変更するには、--workerMachineType
オプションを設定します。
Python
マシンタイプを変更するには、--worker_machine_type
オプションを設定します。
Go
マシンタイプを変更するには、‑‑worker_machine_type
オプションを設定します。
リソース割り当て
Dataflow サービスは、ジョブの開始とワーカー インスタンスの最大数へのスケーリングのために、ジョブの実行に必要な Compute Engine リソース割り当てが Google Cloud プロジェクトにあることをチェックします。十分なリソース割り当てが使用可能でない場合、ジョブの開始は失敗します。
Dataflow ジョブが Compute Engine 仮想マシンをマネージド インスタンス グループとしてデプロイする場合は、プロジェクトがいくつかの追加割り当て要件を満たすことを確認する必要があります。具体的には、プロジェクトには、同時に実行する Dataflow ジョブごとに次のいずれかのタイプの割り当てが必要になります。
- ジョブごとに 1 つのインスタンス グループ
- ジョブごとに 1 つのマネージド インスタンス グループ
- ジョブごとに 1 つのインスタンス テンプレート
注意: Dataflow ジョブのインスタンス テンプレートまたはマネージド インスタンス グループの手動変更は、推奨またはサポートされていません。代わりに Dataflow のパイプライン構成オプションを使用してください。
Dataflow の水平自動スケーリング機能は、プロジェクトの使用可能 Compute Engine 割り当てによって制限されます。ジョブの開始時に十分な割り当てがあっても、別のジョブがプロジェクトの使用可能割り当ての残りを使用する場合、最初のジョブは実行されますが、完全にはスケーリングできません。
しかし、Dataflow サービスはプロジェクトのリソース割り当てを超えるジョブの割り当ての増加を管理しません。ユーザーは、追加のリソース割り当てについて必要なリクエストを行う責任があります。これは、Google Cloud コンソールで行えます。
IP アドレス
デフォルトでは、Dataflow は、パブリック IP アドレスとプライベート IP アドレスの両方をワーカー VM に割り当てます。パブリック IP アドレスは、インターネット アクセスの基準のいずれかを満たしますが、パブリック IP アドレスは外部 IP アドレスの割り当てにもカウントされます。
ワーカー VM が公共のインターネットにアクセスする必要がない場合は、内部 IP アドレスのみを使用することを検討してください。外部割り当てにはカウントされません。IP アドレスの構成について詳しくは、次のリソースをご覧ください。
非アクティブなワーカー
特定のジョブのワーカーが 1 時間に十分なアクティビティを示していない場合、そのジョブは失敗しています。ワーカーが非アクティブな場合、依存関係の管理で問題が発生することがあります。たとえば、カスタム コンテナ イメージの依存関係をインストール中にワーカーで問題が発生した場合、ワーカーの開始が失敗したり、進行状況の取得に失敗することがあります。進行状況がない場合、ジョブが失敗している可能性があります。詳しくは、次をご覧ください。
永続ディスク リソース
Dataflow サービスは、ストリーミング ジョブの実行時に、ワーカー インスタンスあたり 15 個の永続ディスクに制限されています。各永続ディスクは、個々の Compute Engine 仮想マシンに対してローカルです。ジョブは永続ディスクより多くのワーカーを持つことができません。ワーカーとディスク間の 1:1 の比率が最小リソース割り当てです。
Streaming Engine を使用するジョブでは、30 GB のブートディスクが使用されます。Dataflow Shuffle を使用するジョブでは、25 GB のブートディスクが使用されます。これらの製品を使用していないジョブの場合、各永続ディスクのデフォルト サイズはバッチモードで 250 GB、ストリーミング モードで 400 GB です。
場所
デフォルトでは、Dataflow サービスは、us-central1
リージョンの us-central1-f
ゾーンに Compute Engine リソースをデプロイします。--region
パラメータを指定することで、この設定をオーバーライドできます。リソースに特定のゾーンを使用する必要がある場合は、パイプラインを作成するときに --zone
パラメータを使用します。ただし、リージョンのみを指定し、ゾーンを指定しないでおくことをおすすめします。こうすることで、Dataflow サービスは、ジョブ作成リクエスト時に使用可能なゾーン容量に基づいて、リージョン内の最適なゾーンを自動的に選択できます。詳細については、Dataflow のリージョンをご覧ください。