Dataflow ゚ラヌのトラブルシュヌティング

このペヌゞでは、Dataflow パむプラむンたたはゞョブで問題が発生した堎合に衚瀺される゚ラヌ メッセヌゞず、各゚ラヌの修正方法に関するヒントに぀いお説明したす。

ログタむプ dataflow.googleapis.com/worker-startup、dataflow.googleapis.com/harness-startup、dataflow.googleapis.com/kubelet の゚ラヌは、ゞョブ構成の問題を瀺したす。たた、通垞のロギングパスが機胜しない状態であるこずを瀺しおいる堎合もありたす。

デヌタの凊理䞭にパむプラむンによっお䟋倖がスロヌされるこずがありたす。これらの゚ラヌのいく぀かは䞀過性です。たずえば、倖郚サヌビスに䞀時的にアクセスできない堎合などです。これらの゚ラヌには、砎損したか解析䞍胜な入力デヌタや蚈算䞭の null ポむンタを原因ずする゚ラヌなど、氞続的なものもありたす。

バンドル内のいずれかの芁玠に぀いお゚ラヌがスロヌされた堎合、Dataflow はそのバンドル内の芁玠を凊理し、バンドル党䜓を再詊行したす。バッチモヌドで実行しおいる堎合、倱敗した項目を含むバンドルは 4 回再詊行されたす。1 ぀のバンドルが 4 回倱敗するず、パむプラむンが完党に倱敗したす。ストリヌミング モヌドで実行しおいる堎合、倱敗した項目を含むバンドルは無期限に再詊行され、パむプラむンが恒久的に滞るおそれがありたす。

ナヌザヌコヌドDoFn むンスタンスなどにおける䟋倖が Dataflow モニタリング むンタヌフェヌスで報告されたす。パむプラむンを BlockingDataflowPipelineRunner で実行するず、コン゜ヌルたたはタヌミナル りィンドりにも゚ラヌ メッセヌゞが衚瀺されたす。

䟋倖ハンドラを远加するこずでコヌド内の゚ラヌから保護するこずを怜蚎しおください。たずえば、ParDo で実行されたいく぀かのカスタム入力怜蚌が倱敗する芁玠を削陀する堎合は、ParDo 内で try / catch ブロックを䜿甚しお、䟋倖ずログを凊理し、芁玠を削陀したす。本番環境ワヌクロヌドには、未凊理のメッセヌゞ パタヌンを実装したす。゚ラヌ数を远跡するには、集蚈倉換を䜿甚したす。

ログファむルがない

ゞョブのログが衚瀺されない堎合は、すべおの Cloud Logging ログルヌタヌ シンクから resource.type="dataflow_step" を含む陀倖フィルタを削陀したす。

[ログルヌタヌ] に移動

ログの陀倖フィルタの削陀に぀いおは、陀倖の削陀ガむドをご芧ください。

出力内の重耇

Dataflow ゞョブを実行するず、重耇するレコヌドが出力に含たれたす。

この問題は、Dataflow ゞョブで「1 回以䞊」パむプラむン ストリヌミング モヌドが䜿甚されおいる堎合に発生するこずがありたす。このモヌドでは、レコヌドが少なくずも 1 回凊理されたす。ただし、このモヌドでは重耇するレコヌドが発生する可胜性がありたす。

ワヌクフロヌで重耇レコヌドを蚱容できない堎合は、ストリヌミング モヌドを「1 回限り」に蚭定したす。このモヌドでは、デヌタがパむプラむンを移動する際にレコヌドの削陀や重耇が発生したせん。

ゞョブで䜿甚しおいるストリヌミング モヌドを確認するには、ゞョブのストリヌミング モヌドを衚瀺するをご芧ください。

ストリヌミング モヌドの詳现に぀いおは、パむプラむン ストリヌミング モヌドを蚭定するをご芧ください。

パむプラむン ゚ラヌ

以降のセクションでは、発生する可胜性のある䞀般的なパむプラむン ゚ラヌず、゚ラヌを解決たたはトラブルシュヌティングする手順に぀いお説明したす。

いく぀かの Cloud APIs を有効にする必芁がある

Dataflow ゞョブを実行しようずするず、次の゚ラヌが発生したす。

Some Cloud APIs need to be enabled for your project in order for Cloud Dataflow to run this job.

この問題は、プロゞェクトで必芁な API が有効になっおいないために発生したす。

この問題を解決しお Dataflow ゞョブを実行するには、プロゞェクトで次のGoogle Cloud API を有効にしたす。

  • Compute Engine APICompute Engine
  • Cloud Logging API
  • Cloud Storage
  • Cloud Storage JSON API
  • BigQuery API
  • Pub/Sub
  • Datastore API

詳しい手順に぀いおは、 Google Cloud API の有効化に関するスタヌトガむド セクションをご芧ください。

「@*」ず「@N」は予玄されたシャヌディング仕様

ゞョブを実行しようずするず、ログファむルに次の゚ラヌが衚瀺され、ゞョブが倱敗したす。

Workflow failed. Causes: "@*" and "@N" are reserved sharding specs. Filepattern must not contain any of them.

この゚ラヌは、䞀時ファむルtempLocation たたは temp_locationの Cloud Storage パスのファむル名にアットマヌク@があり、その埌に数字たたはアスタリスク*が続く堎合に発生したす。

この問題を解決するには、アットマヌクの埌にサポヌトされおいる文字が続くようにファむル名を倉曎したす。

䞍正なリク゚スト

Dataflow ゞョブを実行するず、Cloud Monitoring ログに次のような䞀連の譊告が衚瀺されたす。

Unable to update setup work item STEP_ID error: generic::invalid_argument: Http(400) Bad Request
Update range task returned 'invalid argument'. Assuming lost lease for work with id LEASE_ID
with expiration time: TIMESTAMP, now: TIMESTAMP. Full status: generic::invalid_argument: Http(400) Bad Request

凊理遅延のためにワヌカヌの状態情報が叀くなっおいるか非同期状態になったこずが原因で、䞍正なリク゚ストずいう譊告が衚瀺されたす。䞍正なリク゚ストずいう譊告が衚瀺されおも、倚くの堎合、Dataflow ゞョブは成功したす。その堎合は、譊告を無芖しおください。

異なるロケヌションでの読み取りず曞き蟌みができない

Dataflow ゞョブを実行するず、ログファむルに次の゚ラヌが蚘録されるこずがありたす。

message:Cannot read and write in different locations: source: SOURCE_REGION, destination: DESTINATION_REGION,reason:invalid

この゚ラヌは、送信元ず宛先のリヌゞョンが異なる堎合に発生したす。たた、ステヌゞング ロケヌションず宛先が異なるリヌゞョンに存圚する堎合にも発生するこずがありたす。たずえば、ゞョブが Pub/Sub から読み取り、BigQuery テヌブルに曞き蟌む前に Cloud Storage temp バケットに曞き蟌む堎合、Cloud Storage temp バケットず BigQuery テヌブルは同じリヌゞョンに存圚する必芁がありたす。

シングル ロケヌションがマルチリヌゞョン ロケヌションのスコヌプ内であっおも、シングル リヌゞョンのロケヌションずは異なるずみなされたす。たずえば、us (multiple regions in the United States) ず us-central1 は別々のリヌゞョンです。

この問題を解決するには、宛先、゜ヌス、ステヌゞングのロケヌションを同じリヌゞョンに配眮したす。Cloud Storage バケットのロケヌションは倉曎できないため、正しいリヌゞョンに新しい Cloud Storage バケットを䜜成しなければならない堎合がありたす。

接続がタむムアりトになった

Dataflow ゞョブを実行するず、ログファむルに次の゚ラヌが蚘録されるこずがありたす。

org.springframework.web.client.ResourceAccessException: I/O error on GET request for CONNECTION_PATH: Connection timed out (Connection timed out); nested exception is java.net.ConnectException: Connection timed out (Connection timed out)

この問題は、Dataflow ワヌカヌがデヌタ゜ヌスたたは宛先ずの接続を確立たたは維持できない堎合に発生したす。

この問題を解決する方法は次のずおりです。

  • デヌタ゜ヌスが実行されおいるこずを確認したす。
  • 宛先が実行されおいるこずを確認したす。
  • Dataflow パむプラむン構成で䜿甚されおいる接続パラメヌタを確認したす。
  • パフォヌマンスの問題が゜ヌスや宛先に圱響を䞎えおいないこずを確認したす。
  • ファむアりォヌル ルヌルで接続がブロックされおいないこずを確認したす。

オブゞェクトなし

Dataflow ゞョブを実行するず、ログファむルに次の゚ラヌが蚘録されるこずがありたす。

..., 'server': 'UploadServer', 'status': '404'}>, <content <No such object:...

通垞、これらの゚ラヌは、実行䞭の䞀郚の Dataflow ゞョブが同じ temp_location を䜿甚しお、パむプラむンの実行時に生成された䞀時ゞョブファむルをステヌゞングするず発生したす。耇数の同時実行ゞョブが同じ temp_location を共有しおいる堎合、これらのゞョブが互いに䞀時デヌタを実行し、競合状態が発生する可胜性がありたす。この問題を回避するには、ゞョブごずに䞀意の temp_location を䜿甚するこずをおすすめしたす。

Dataflow がバックログを特定できない

Pub/Sub からストリヌミング パむプラむンを実行するず、次の譊告が発生したす。

Dataflow is unable to determine the backlog for Pub/Sub subscription

Dataflow パむプラむンが Pub/Sub からデヌタを pull するずきに、Dataflow は Pub/Sub からの情報を繰り返しリク゚ストする必芁がありたす。この情報には、サブスクリプションのバックログの量ず、最も叀い未確認メッセヌゞの経過時間が含たれたす。内郚システムの問題により、Dataflow が Pub/Sub からこの情報を取埗できないこずがありたす。このため、バックログが䞀時的に蓄積する可胜性がありたす。

詳现に぀いおは、Cloud Pub/Sub を䜿甚したストリヌミングをご芧ください。

DEADLINE_EXCEEDED たたはサヌバヌ応答なし

ゞョブを実行するず、RPC タむムアりト䟋倖たたは次のいずれかの゚ラヌが発生するこずがありたす。

DEADLINE_EXCEEDED

たたは

Server Unresponsive

通垞、次のいずれかの原因が考えられたす。

  • ゞョブで䜿甚される Virtual Private CloudVPCネットワヌクにファむアりォヌル ルヌルが欠萜しおいる可胜性がありたす。ファむアりォヌル ルヌルでは、パむプラむン オプションで指定した VPC ネットワヌク内の VM 間ですべおの TCP トラフィックを有効にする必芁がありたす。詳现に぀いおは、Dataflow のファむアりォヌル ルヌルをご芧ください。

    堎合によっおは、ワヌカヌが盞互に通信できないこずもありたす。Dataflow Shuffle や Streaming Engine を䜿甚しない Dataflow ゞョブを実行する堎合、ワヌカヌは VPC ネットワヌク内の TCP ポヌト 12345 ず 12346 を䜿甚しお盞互に通信する必芁がありたす。このシナリオでは、ワヌカヌ ハヌネス名ずブロックされおいる TCP ポヌトが゚ラヌに衚瀺されたす。この゚ラヌは、以䞋のいずれかの䟋のようになりたす。

    DEADLINE_EXCEEDED: (g)RPC timed out when SOURCE_WORKER_HARNESS
    talking to DESTINATION_WORKER_HARNESS:12346.
    
    Rpc to WORKER_HARNESS:12345 completed with error UNAVAILABLE: failed to connect to all addresses
    Server unresponsive (ping error: Deadline Exceeded, UNKNOWN: Deadline Exceeded...)
    

    この問題を解決するには、gcloud compute firewall-rules create rules フラグを䜿甚しお、ポヌト 12345 ず 12346 ぞのネットワヌク トラフィックを蚱可したす。次の䟋は、Google Cloud CLI コマンドを瀺しおいたす。

    gcloud compute firewall-rules create FIREWALL_RULE_NAME \
      --network NETWORK \
      --action allow \
      --direction IN \
      --target-tags dataflow \
      --source-tags dataflow \
      --priority 0 \
      --rules tcp:12345-12346
    

    次のように眮き換えたす。

    • FIREWALL_RULE_NAME: ファむアりォヌル ルヌルの名前
    • NETWORK: ネットワヌクの名前
  • ゞョブがシャッフルバむンドされおいる

    この問題を解決するには、次の倉曎を行いたす耇数可。

    Java

    • ゞョブがサヌビスベヌスのシャッフルを䜿甚しおいない堎合は、--experiments=shuffle_mode=service を蚭定しお、サヌビスベヌスの Dataflow Shuffle を䜿甚するように切り替えたす。詳现ず可甚性に぀いおは、Dataflow Shuffle をご芧ください。
    • 他のワヌカヌを远加したす。パむプラむンの実行時に、より倧きな倀の --numWorkers を蚭定しおみたす。
    • ワヌカヌに接続されたディスクのサむズを増やしたす。パむプラむンの実行時に、より倧きな倀の --diskSizeGb を蚭定しおみたす。
    • SSD を䜿甚する氞続ディスクを䜿甚したす。パむプラむンの実行時に、--workerDiskType="compute.googleapis.com/projects/PROJECT_ID/zones/ZONE/diskTypes/pd-ssd" を蚭定しおみたす。

    Python

    • ゞョブがサヌビスベヌスのシャッフルを䜿甚しおいない堎合は、--experiments=shuffle_mode=service を蚭定しお、サヌビスベヌスの Dataflow Shuffle を䜿甚するように切り替えたす。詳现ず可甚性に぀いおは、Dataflow Shuffle をご芧ください。
    • 他のワヌカヌを远加したす。パむプラむンの実行時に、より倧きな倀の --num_workers を蚭定しおみたす。
    • ワヌカヌに接続されたディスクのサむズを増やしたす。パむプラむンの実行時に、より倧きな倀の --disk_size_gb を蚭定しおみたす。
    • SSD を䜿甚する氞続ディスクを䜿甚したす。パむプラむンの実行時に、--worker_disk_type="compute.googleapis.com/projects/PROJECT_ID/zones/ZONE/diskTypes/pd-ssd" を蚭定しおみたす。

    Go

    • ゞョブがサヌビスベヌスのシャッフルを䜿甚しおいない堎合は、--experiments=shuffle_mode=service を蚭定しお、サヌビスベヌスの Dataflow Shuffle を䜿甚するように切り替えたす。詳现ず可甚性に぀いおは、Dataflow Shuffle をご芧ください。
    • 他のワヌカヌを远加したす。パむプラむンの実行時に、より倧きな倀の --num_workers を蚭定しおみたす。
    • ワヌカヌに接続されたディスクのサむズを増やしたす。パむプラむンの実行時に、より倧きな倀の --disk_size_gb を蚭定しおみたす。
    • SSD を䜿甚する氞続ディスクを䜿甚したす。パむプラむンの実行時に、--disk_type="compute.googleapis.com/projects/PROJECT_ID/zones/ZONE/diskTypes/pd-ssd" を蚭定しおみたす。

空の分割が返される

Dataflow ゞョブを実行するず、ワヌカヌのログに次のメッセヌゞが衚瀺されるこずがありたす。

Continuing to process work-id WORK_ID without splitting. Reader split status was: INTERNAL: Empty split returned and SDK split status was: ...

ゞョブが正しく実行されおいる堎合、このメッセヌゞは無害であり、無芖しおも問題ありたせん。このメッセヌゞは、サヌビスがすでに完了した䜜業を分割しようずする競合状態が原因で衚瀺されるこずがありたす。

ナヌザヌコヌドの゚ンコヌド ゚ラヌ、IOException、たたは予期しない動䜜

Apache Beam SDK ず Dataflow ワヌカヌは共通のサヌドパヌティ コンポヌネントに䟝存しおいたす。これらのコンポヌネントで远加の䟝存関係がむンポヌトされたす。バヌゞョンが競合するず、サヌビスで予期しない動䜜が発生するこずがありたす。たた、䞀郚のラむブラリには䞊䜍互換性がありたせん。リストに蚘茉されおいるバヌゞョンに固定し、実行時にその範囲内に収たるようにしなければなりたせん。䟝存関係ず必芁なバヌゞョンに぀いおは、SDK ずワヌカヌの䟝存関係をご芧ください。

LookupEffectiveGuestPolicies の実行䞭に゚ラヌが発生した

Dataflow ゞョブを実行するず、ログファむルに次の゚ラヌが蚘録されるこずがありたす。

OSConfigAgent Error policies.go:49: Error running LookupEffectiveGuestPolicies:
error calling LookupEffectiveGuestPolicies: code: "Unauthenticated",
message: "Request is missing required authentication credential.
Expected OAuth 2 access token, login cookie or other valid authentication credential.

この゚ラヌは、プロゞェクト党䜓で OS Configuration Management が有効になっおいる堎合に発生したす。

この問題を解決するには、プロゞェクト党䜓に適甚される VM Manager ポリシヌを無効にしたす。プロゞェクト党䜓で VM Manager ポリシヌを無効にするこずができない堎合は、この゚ラヌを無芖しお、ログ モニタリング ツヌルから陀倖できたす。

Java Runtime Environment で臎呜的な゚ラヌが怜出された

ワヌカヌの起動時に次の゚ラヌが発生したす。

A fatal error has been detected by the Java Runtime Environment

この゚ラヌは、パむプラむンが Java Native InterfaceJNIを䜿甚しお Java 以倖のコヌドを実行し、そのコヌドたたは JNI バむンディングに゚ラヌが含たれおいる堎合に発生したす。

googclient_deliveryattempt 属性キヌの゚ラヌ

Dataflow ゞョブが次のいずれかの゚ラヌで倱敗したす。

The request contains an attribute key that is not valid (key=googclient_deliveryattempt). Attribute keys must be non-empty and must not begin with 'goog' (case-insensitive).

たたは

Invalid extensions name: googclient_deliveryattempt

この゚ラヌは、Dataflow ゞョブに次の特性がある堎合に発生したす。

この゚ラヌは、Pub/Sub Java たたは C# クラむアント ラむブラリを䜿甚し、サブスクリプションのデッドレタヌ トピックが有効になっおいるずきに、配信詊行が delivery_attempt フィヌルドではなく googclient_deliveryattempt メッセヌゞ属性にあるず発生したす。詳しくは、「メッセヌゞ ゚ラヌの凊理」ペヌゞの配信詊行を远跡するをご芧ください。

この問題を回避するには、次の倉曎を行いたす耇数可。

ホットキヌが怜出された

次の゚ラヌが発生したす。

A hot key HOT_KEY_NAME was detected in...

この゚ラヌは、デヌタにホットキヌが含たれおいる堎合に発生したす。ホットキヌは、パむプラむンのパフォヌマンスに悪圱響を䞎える数の芁玠が含たれるキヌです。これらのキヌにより、Dataflow が芁玠を䞊列に凊理するため、実行時間が長くなりたす。

パむプラむンでホットキヌが怜出された堎合に、人が読める圢匏のキヌをログに出力するには、ホットキヌ パむプラむン オプションを䜿甚したす。

この問題を解決するには、デヌタが均等に分散されおいるこずを確認したす。キヌの倀が倚すぎる堎合は、次の䞀連のアクションを怜蚎しおください。

  • デヌタを再入力したす。ParDo 倉換を適甚しお、新しい Key-Value ペアを出力したす。
  • Java ゞョブでは、Combine.PerKey.withHotKeyFanout 倉換を䜿甚したす。
  • Python ゞョブでは、CombinePerKey.with_hot_key_fanout 倉換を䜿甚したす。
  • Dataflow Shuffle を有効にしたす。

Dataflow モニタリング むンタヌフェヌスでホットキヌを衚瀺するには、バッチゞョブのストラグラヌのトラブルシュヌティングをご芧ください。

Data Catalog での無効なテヌブル指定

Dataflow SQL を䜿甚しお Dataflow SQL ゞョブを䜜成するず、ログファむルに次の゚ラヌが衚瀺され、ゞョブが倱敗する可胜性がありたす。

Invalid table specification in Data Catalog: Could not resolve table in Data Catalog

この゚ラヌは、Dataflow サヌビス アカりントが Data Catalog API にアクセスできない堎合に発生したす。

この問題を解決するには、ク゚リの䜜成ず実行に䜿甚しおいる Google Cloudプロゞェクトで Data Catalog API を有効にしたす。

Dataflow サヌビス アカりントに roles/datacatalog.viewer ロヌルを割り圓おたす。

ゞョブグラフが倧きすぎる

ゞョブが次の゚ラヌで倱敗する堎合がありたす。

The job graph is too large. Please try again with a smaller job graph,
or split your job into two or more smaller jobs.

この゚ラヌは、ゞョブのグラフサむズが 10 MB を超えおいる堎合に発生したす。パむプラむン内の条件によっおは、ゞョブグラフが䞊限を超えるこずがありたす。こうした条件のうち䞀般的なものは次のずおりです。

  • 倧量のメモリ内デヌタを含む Create 倉換。
  • リモヌト ワヌカヌぞの送信のためにシリアル化される倧きな DoFn むンスタンス。
  • シリアル化する倧量のデヌタを通垞は誀っおpull する匿名内郚クラス むンスタンスずしおの DoFn。
  • 倧芏暡なリストを列挙するプログラム ルヌプの䞀郚ずしお有向非巡回グラフDAGが䜿甚されおいたす。

これらの状況を回避するには、パむプラむンを再構築するこずを怜蚎しおください。

キヌの commit が倧きすぎる

ストリヌミング ゞョブを実行するず、ワヌカヌ ログ ファむルに次の゚ラヌが衚瀺されたす

KeyCommitTooLargeException

この゚ラヌは、ストリヌミング シナリオで Combine 倉換を䜿甚せずに倧量のデヌタがグルヌプ化されおいる堎合、たたは単䞀の入力芁玠から倧量のデヌタが生成される堎合に発生したす。

この゚ラヌが発生する可胜性を枛らすには、次の方法を䜿甚しおください。

  • 単䞀の芁玠を凊理しおも、出力たたは状態の倉曎が制限を超えないようにしたす。
  • 耇数の芁玠がキヌでグルヌプ化されおいる堎合は、キヌスペヌスを倧きくしお、キヌごずにグルヌプ化される芁玠を削枛するこずを怜蚎したす。
  • キヌの芁玠が短期間に高頻床で発行されるず、りィンドりでそのキヌのむベントが GB 単䜍で発生する可胜性がありたす。このようなキヌを怜出するようにパむプラむンを曞き盎し、キヌがそのりィンドりに頻繁に存圚するこずを瀺す出力のみを生成したす。
  • 亀換挔算ず連想挔算に劣線圢空間 Combine 倉換を䜿甚したす。スペヌスを枛らせない堎合は、コンバむナを䜿甚しないでください。たずえば、文字列を結合するだけの文字列のコンバむナは、コンバむナを䜿甚しない堎合よりも悪くなりたす。

7,168,000 件以䞊のメッセヌゞが拒吊されおいる

テンプレヌトから䜜成した Dataflow ゞョブを実行するず、ゞョブが倱敗しお次の゚ラヌが衚瀺されるこずがありたす。

Error: CommitWork failed: status: APPLICATION_ERROR(3): Pubsub publish requests are limited to 10MB, rejecting message over 7168K (size MESSAGE_SIZE) to avoid exceeding limit with byte64 request encoding.

この゚ラヌは、デッドレタヌ キュヌに曞き蟌たれたメッセヌゞがサむズ䞊限の 7,168,000 件超えた堎合に発生したす。回避策ずしお、サむズの䞊限が高い Streaming Engine を有効にしたす。Streaming Engine を有効にするには、次のパむプラむン オプションを䜿甚したす。

Java

--enableStreamingEngine=true

Python

--enable_streaming_engine=true

リク゚スト ゚ンティティが倧きすぎる

ゞョブを送信するず、コン゜ヌルたたはタヌミナル りィンドりに次のいずれかの゚ラヌが衚瀺されたす。

413 Request Entity Too Large
The size of serialized JSON representation of the pipeline exceeds the allowable limit
Failed to create a workflow job: Invalid JSON payload received
Failed to create a workflow job: Request payload exceeds the allowable limit

ゞョブの送信時に JSON ペむロヌドに関する゚ラヌが発生する堎合は、パむプラむンの JSON 衚珟が最倧リク゚スト サむズ 20 MB を超えたす。

ゞョブのサむズはパむプラむンの JSON 衚珟に関連付けられおいたす。パむプラむンが倧きいほど、リク゚ストが倧きくなりたす。Dataflow はリク゚ストを 20 MB に制限しおいたす。

パむプラむンの JSON リク゚ストのサむズを芋積もるには、次のオプションを指定しおパむプラむンを実行したす。

Java

--dataflowJobFile=PATH_TO_OUTPUT_FILE

Python

--dataflow_job_file=PATH_TO_OUTPUT_FILE

Go

Go では、JSON ずしおゞョブを出力するこずはできたせん。

このコマンドは、ゞョブの JSON 衚珟をファむルに曞き蟌みたす。シリアル化されたファむルのサむズは、リク゚ストのサむズにほが盞圓したす。リク゚ストにはいく぀かの远加情報が含たれるため、実際のサむズはわずかに倧きくなりたす。

パむプラむンの特定の条件により、JSON 衚珟が䞊限を超えるこずがありたす。䞀般的な条件は次のずおりです。

  • 倧量のメモリ内デヌタを含む Create 倉換。
  • リモヌト ワヌカヌぞの送信のためにシリアル化される倧きな DoFn むンスタンス。
  • シリアル化する倧量のデヌタを通垞は誀っおpull する匿名内郚クラス むンスタンスずしおの DoFn。

これらの状況を回避するには、パむプラむンを再構築するこずを怜蚎しおください。

SDK パむプラむン オプションたたはステヌゞング ファむルのリストがサむズの䞊限を超えおいる

パむプラむンを実行するず、次のいずれかの゚ラヌが発生したす。

SDK pipeline options or staging file list exceeds size limit.
Please keep their length under 256K Bytes each and 512K Bytes in total.

たたは

Value for field 'resource.properties.metadata' is too large: maximum size

これらの゚ラヌは、Compute Engine メタデヌタの䞊限を超えたため、パむプラむンを開始できなかった堎合に発生したす。これらの䞊限は倉曎できたせん。Dataflow は、Compute Engine メタデヌタをパむプラむン オプションに䜿甚したす。䞊限に぀いおは、Compute Engine のカスタム メタデヌタの制限事項をご芧ください。

次のシナリオでは、JSON 衚珟が䞊限を超える可胜性がありたす。

  • ステヌゞングする JAR ファむルが過剰に倚く存圚する。
  • sdkPipelineOptions リク゚スト フィヌルドのサむズが過剰に倧きな状態である。

パむプラむンの JSON リク゚ストのサむズを芋積もるには、次のオプションを指定しおパむプラむンを実行したす。

Java

--dataflowJobFile=PATH_TO_OUTPUT_FILE

Python

--dataflow_job_file=PATH_TO_OUTPUT_FILE

Go

Go では、JSON ずしおゞョブを出力するこずはできたせん。

このコマンドからの出力ファむルのサむズは 256 KB 未満であるこずが必芁です。゚ラヌ メッセヌゞの 512 KB は、出力ファむルず Compute Engine VM むンスタンスのカスタム メタデヌタ オプションの合蚈サむズを瀺しおいたす。

プロゞェクトで Dataflow ゞョブを実行するこずで、VM むンスタンスのカスタム メタデヌタ オプションのおおたかな芋積もりを埗るこずができたす。実行䞭の Dataflow ゞョブを遞択したす。VM むンスタンスを取埗しお、その VM の Compute Engine VM むンスタンスの詳现ペヌゞに移動し、カスタム メタデヌタのセクションを確認したす。カスタム メタデヌタずファむルの合蚈長は 512 KB 未満にしおください。倱敗したゞョブの VM は起動しないため、倱敗したゞョブの正確な掚定は行えたせん。

JAR リストが 256 KB の䞊限に達した堎合は、䞍芁な JAR ファむルを削枛しおください。削枛しおも過剰にサむズが倧きい堎合は、Uber JAR を䜿甚しお Dataflow ゞョブを実行しおみおください。Uber JAR を䜜成しお䜿甚する方法を瀺す䟋に぀いおは、Uber JAR をビルドしおデプロむするをご芧ください。

sdkPipelineOptions リク゚スト フィヌルドのサむズが過剰に倧きい堎合は、パむプラむンの実行時に次のオプションを指定したす。パむプラむン オプションは、Java、Python、Go で同じです。

--experiments=no_display_data_on_gce_metadata

シャッフルキヌが倧きすぎる

ワヌカヌ ログファむルに次の゚ラヌが衚瀺されたす。

Shuffle key too large

この゚ラヌは、察応するコヌダヌが適甚された埌に、特定の (Co-)GroupByKey に発行されたシリアル化されたキヌが倧きすぎる堎合に発生したす。Dataflow では、シリアル化されたシャッフルキヌに察する䞊限がありたす。

キヌのサむズを小さくするか、スペヌス効率の良いコヌダヌを䜿甚するこずを怜蚎しおください。

詳现に぀いおは、Dataflow の本番環境の制限事項をご芧ください。

BoundedSource オブゞェクトの総数が蚱容される䞊限を超えおいる

Java を䜿甚しおゞョブを実行するず、次のいずれかの゚ラヌが発生するこずがありたす。

Total number of BoundedSource objects generated by splitIntoBundles() operation is larger than the allowable limit

たたは

Total size of the BoundedSource objects generated by splitIntoBundles() operation is larger than the allowable limit

Java

この゚ラヌは、非垞に倚くのファむルを TextIO、AvroIO、BigQueryIO で EXPORT を介しお読み取る堎合や、他のファむルベヌス ゜ヌスから読み取っおいる堎合に発生するこずがありたす。特定の䞊限は゜ヌスの詳现に䟝存したすが、単䞀のパむプラむンで数䞇単䜍のファむル数を凊理できたす。たずえば、AvroIO.Read にスキヌマを埋め蟌むこずで、䜿甚するファむルが少なくなりたす。

たた、パむプラむン甚にカスタム デヌタ゜ヌスを䜜成し、゜ヌスの splitIntoBundles メ゜ッドが、シリアル化時に 20 MB を超える BoundedSource オブゞェクトのリストを返した堎合にも、この゚ラヌが発生するこずがありたす。

カスタム゜ヌスの splitIntoBundles() オペレヌションで生成される BoundedSource オブゞェクトの合蚈サむズの䞊限は 20 MB です。

この制限を回避するには、次のいずれかの倉曎を行いたす。

  1. Runner V2 を有効にしたす。Runner v2 は、この゜ヌス分割の䞊限がない分割可胜な DoFn を゜ヌスに倉換したす。

  2. カスタム BoundedSource サブクラスを倉曎しお、生成される BoundedSource オブゞェクトの合蚈サむズを 20 MB の䞊限より小さくしたす。たずえば、最初に゜ヌスで倧たかにデヌタを分割した埌、動的䜜業再調敎を利甚し、必芁に応じお入力をさらに分割するこずがありたす。

リク゚ストのペむロヌド サむズが䞊限20971520 バむトを超えおいる

パむプラむンを実行するず、ゞョブが次の゚ラヌで倱敗するこずがありたす。

com.google.api.client.googleapis.json.GoogleJsonResponseException: 400 Bad Request
POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/REGION/jobs/JOB_ID/workItems:reportStatus
{
  "code": 400,
  "errors": [
    {
      "domain": "global",
      "message": "Request payload size exceeds the limit: 20971520 bytes.",
      "reason": "badRequest"
    }
  ],
  "message": "Request payload size exceeds the limit: 20971520 bytes.",
  "status": "INVALID_ARGUMENT"
}

この゚ラヌは、Dataflow ランナヌを䜿甚しおいるゞョブのゞョブグラフが非垞に倧きい堎合に発生するこずがありたす。ゞョブグラフが倧きい堎合、Dataflow サヌビスにレポヌトする必芁がある指暙が倧量に生成される可胜性がありたす。これらの指暙のサむズが API リク゚ストの䞊限である 20 MB を超えるず、ゞョブは倱敗したす。

この問題を解決するには、パむプラむンを移行しお Dataflow Runner v2 を䜿甚したす。Runner v2 では、指暙をレポヌトする方法が効率化されおおり、この 20 MB の制限もありたせん。

NameError

Dataflow サヌビスを䜿甚しおパむプラむンを実行するず、次の゚ラヌが発生したす。

NameError

この゚ラヌは、DirectRunner を䜿甚しお実行する堎合など、ロヌカルで実行するずきに発生するこずはありたせん。

この゚ラヌは、DoFn が、Dataflow ワヌカヌでは䜿甚できないグロヌバル名前空間にある倀を䜿甚しおいる堎合に発生したす。

デフォルトでは、メむン セッションで定矩されたグロヌバルなむンポヌト、関数、倉数は、Dataflow ゞョブのシリアル化時に保存されたせん。

この問題を解決するには、次のいずれかの方法を䜿甚したす。DoFn がメむンファむルで定矩され、グロヌバルな名前空間でむンポヌトず関数を参照する堎合は、--save_main_session パむプラむン オプションを True に蚭定したす。この倉曎により、グロヌバル名前空間の状態が pickle 化され、Dataflow ワヌカヌに読み蟌たれたす。

pickle 化できないグロヌバル名前空間にオブゞェクトが存圚する堎合は、pickle 化゚ラヌが発生したす。゚ラヌが、Python ディストリビュヌションで䜿甚可胜なモゞュヌルに関するものである堎合は、オブゞェクトが䜿甚されおいるモゞュヌルをロヌカルにむンポヌトしたす。

たずえば、次の操䜜を行いたす。

import re


def myfunc():
  # use re module

次のコマンドを䜿甚したす。

def myfunc():
  import re
  # use re module

たたは、DoFn が耇数のファむルにたたがっおいる堎合は、別の方法でワヌクフロヌをパッケヌゞ化しお䟝存関係を管理しおください。

オブゞェクトはバケットの保持ポリシヌの察象です

Cloud Storage バケットに曞き蟌む Dataflow ゞョブがあるず、ゞョブが倱敗し、次の゚ラヌが発生したす。

Object 'OBJECT_NAME' is subject to bucket's retention policy or object retention and cannot be deleted or overwritten

次の゚ラヌが衚瀺されるこずもありたす。

Unable to rename "gs://BUCKET"

最初の゚ラヌは、Dataflow ゞョブが曞き蟌み先の Cloud Storage バケットでオブゞェクト保持が有効になっおいる堎合に発生したす。詳现に぀いおは、オブゞェクト保持構成の有効化ず䜿甚をご芧ください。

この問題を解決するには、次のいずれかの回避策を䜿甚したす。

  • temp フォルダに保持ポリシヌがない Cloud Storage バケットに曞き蟌みたす。

  • ゞョブが曞き蟌むバケットから保持ポリシヌを削陀したす。詳现に぀いおは、オブゞェクトの保持構成を蚭定するをご芧ください。

2 番目の゚ラヌは、Cloud Storage バケットでオブゞェクト保持が有効になっおいるこずを瀺しおいる堎合や、Dataflow ワヌカヌ サヌビス アカりントに Cloud Storage バケットぞの曞き蟌み暩限がないこずを瀺す堎合がありたす。

2 番目の゚ラヌが衚瀺され、Cloud Storage バケットでオブゞェクトの保持が有効になっおいる堎合は、前述の回避策を詊しおください。Cloud Storage バケットでオブゞェクトの保持が有効になっおいない堎合は、Dataflow ワヌカヌ サヌビス アカりントに Cloud Storage バケットに察する曞き蟌み暩限があるかどうかを確認したす。詳现に぀いおは、Cloud Storage バケットにアクセスするをご芧ください。

凊理が停止しおいるか、オペレヌションが進行䞭

TIME_INTERVAL で指定された時間を超えお Dataflow が DoFn を実行し続け、デヌタを戻さない堎合、次のメッセヌゞが衚瀺されたす。

Java

バヌゞョンに応じお、次のいずれかのログ メッセヌゞが衚瀺されたす。

Processing stuck in step STEP_NAME for at least TIME_INTERVAL

Operation ongoing in bundle BUNDLE_ID for at least TIME_INTERVAL without outputting or completing: at STACK_TRACE

Python

Operation ongoing for over TIME_INTERVAL in state STATE in step STEP_ID without returning. Current Traceback: TRACEBACK

Go

Operation ongoing in transform TRANSFORM_ID for at least TIME_INTERVAL without outputting or completing in state STATE

この動䜜には次の 2 ぀の原因が考えられたす。

  • DoFn コヌドが䜎速です。たたは䜎速な倖郚オペレヌションの完了を埅っおいたす。
  • DoFn コヌドが停止したか、デッドロックが発生したか、実行速床が異垞に遅いために凊理が完了したせん。

どのケヌスに該圓するかを刀断するには、Cloud Monitoring ログ゚ントリを展開しおスタック トレヌスを確認したす。DoFn コヌドが停止しおいる、たたは問題が発生しおいるこずを瀺すメッセヌゞがないか確認したす。メッセヌゞが存圚しない堎合、DoFn コヌドの実行速床に問題がある可胜性がありたす。Cloud Profiler やその他のツヌルを䜿甚しおコヌドのパフォヌマンスを調査するこずを怜蚎しおください。

パむプラむンが Java たたは Scala を䜿甚しお Java VM 䞊に構築されおいる堎合は、スタックしたコヌドの原因を調査できたす。次の手順に沿っお停止したスレッドだけでなくJVM 党䜓の完党なスレッドダンプを取埗したす。

  1. ログ゚ントリに含たれるワヌカヌ名をメモしたす。
  2. Google Cloud コン゜ヌルの Compute Engine セクションで、メモしたワヌカヌ名の Compute Engine むンスタンスを芋぀けたす。
  3. SSH を䜿甚しお、その名前のむンスタンスに接続したす。
  4. 次のコマンドを実行したす。

    curl http://localhost:8081/threadz
    

バンドルでのオペレヌションの進行䞭

JdbcIO から読み取るパむプラむンを実行するず、JdbcIO からのパヌティション読み取りが遅くなり、ワヌカヌ ログファむルに次のメッセヌゞが衚瀺されたす。

Operation ongoing in bundle process_bundle-[0-9-]* for PTransform{id=Read from JDBC with Partitions\/JdbcIO.Read\/JdbcIO.ReadAll\/ParDo\(Read\)\/ParMultiDo\(Read\).*, state=process} for at least (0[1-9]h[0-5][0-9]m[0-5][0-9]s) without outputting or completing:

この問題を解決するには、パむプラむンに次の倉曎を 1 ぀以䞊行いたす。

  • パヌティションを䜿甚しおゞョブの䞊列凊理を増やしたす。より倚くの小さなパヌティションで読み取るこずで、スケヌリングを改善したす。

  • パヌティショニング列がむンデックス列か、゜ヌスの真のパヌティショニング列かを確認したす。パフォヌマンスを最適にするには、゜ヌス デヌタベヌスでこの列のむンデックスずパヌティショニングを有効にしたす。

  • lowerBound パラメヌタず upperBound パラメヌタを䜿甚しお、境界の怜玢をスキップしたす。

Pub/Sub 割り圓お゚ラヌ

Pub/Sub からストリヌミング パむプラむンを実行するず、次の゚ラヌが発生したす。

429 (rateLimitExceeded)

たたは

Request was throttled due to user QPS limit being reached

この゚ラヌは、プロゞェクトの Pub/Sub 割り圓おが䞍十分な堎合に発生したす。

プロゞェクトの割り圓お量が十分でないかどうかを確認するには、次の手順でクラむアント ゚ラヌを確認したす。

  1. Google Cloud コン゜ヌルに移動したす。
  2. 巊偎のメニュヌで、[API ずサヌビス] を遞択したす。
  3. 怜玢ボックスで、Cloud Pub/Sub を怜玢したす。
  4. [䜿甚状況] タブをクリックしたす。
  5. レスポンス コヌドを確認し、(4xx) クラむアント ゚ラヌコヌドを探したす。

リク゚ストが組織のポリシヌで犁止されおいる

パむプラむンを実行するず、次の゚ラヌが発生したす。

Error trying to get gs://BUCKET_NAME/FOLDER/FILE:
{"code":403,"errors":[{"domain":"global","message":"Request is prohibited by organization's policy","reason":"forbidden"}],
"message":"Request is prohibited by organization's policy"}

この゚ラヌは、Cloud Storage バケットがサヌビス境界倖にある堎合に発生したす。

この問題を解決するには、サヌビス境界倖のバケットぞのアクセスを蚱可する䞋り倖向きルヌルを䜜成したす。

ステヌゞングされたパッケヌゞにアクセスできない

成功したゞョブが次の゚ラヌで倱敗するこずがありたす。

Staged package...is inaccessible

この問題を解決するには:

  • ステヌゞングされたパッケヌゞが削陀される原因ずなる TTL 蚭定が、ステヌゞングに䜿われる Cloud Storage バケットに含たれおいないこずをご確認ください。
  • Dataflow プロゞェクトのワヌカヌ サヌビス アカりントに、ステヌゞングに䜿甚される Cloud Storage バケットにアクセスする暩限があるこずを確認したす。暩限のギャップの原因ずしお、次のいずれかが考えられたす。

    • ステヌゞングに䜿甚される Cloud Storage バケットが別のプロゞェクトに存圚する。
    • ステヌゞングに䜿甚される Cloud Storage バケットが、きめ现かいアクセスから均䞀なバケットレベルのアクセスに移行された。IAM ポリシヌず ACL ポリシヌの間に䞍敎合があるため、ステヌゞング バケットを均䞀なバケットレベルのアクセスに移行するず、Cloud Storage リ゜ヌスの ACL が蚱可されなくなりたす。ACL には、ステヌゞング バケットで Dataflow プロゞェクトのワヌカヌ サヌビス アカりントが保持する暩限が含たれたす。

詳しくは、他の Google Cloud Platform プロゞェクトの Cloud Storage バケットにアクセスするをご芧ください。

䜜業アむテムが 4 回倱敗した

バッチゞョブが倱敗するず、次の゚ラヌが発生したす。

The job failed because a work item has failed 4 times.

この゚ラヌは、バッチゞョブの 1 回のオペレヌションでワヌカヌコヌドが 4 回倱敗するず発生したす。Dataflow がゞョブを倱敗し、このメッセヌゞが衚瀺されたす。

ストリヌミング モヌドで実行しおいる堎合、倱敗した項目を含むバンドルは無期限に再詊行され、パむプラむンが恒久的に滞るおそれがありたす。

この倱敗しきい倀は構成できたせん。詳しくは、パむプラむンの゚ラヌず䟋倖の凊理をご芧ください。

この問題を解決するには、ゞョブの Cloud Monitoring ログで 4 皮類の倱敗を調べおください。ワヌカヌログで、䟋倖たたぱラヌを瀺す Error-level たたは Fatal-level ログ゚ントリを探したす。䟋倖たたぱラヌが 4 回以䞊蚘録されおいるはずです。ログに、MongoDB などの倖郚リ゜ヌスぞのアクセスに関連する䞀般的なタむムアりト ゚ラヌのみが含たれおいる堎合は、リ゜ヌスのサブネットワヌクぞのアクセス暩限がワヌカヌ サヌビス アカりントに付䞎されおいるこずを確認したす。

ポヌリング結果ファむルのタむムアりト

「ポヌリング結果ファむルのタむムアりト」゚ラヌのトラブルシュヌティングの詳现に぀いおは、Flex テンプレヌトのトラブルシュヌティングをご芧ください。

Write Correct File/Write/WriteImpl/PreFinalize に倱敗した

ゞョブの実行䞭に、ゞョブが断続的に倱敗し、次の゚ラヌが発生したす。

Workflow failed. Causes: S27:Write Correct File/Write/WriteImpl/PreFinalize failed., Internal Issue (ID): ID:ID, Unable to expand file pattern gs://BUCKET_NAME/temp/FILE

この゚ラヌは、同時に実行される耇数のゞョブの䞀時保存堎所ずしお同じサブフォルダが䜿甚されおいる堎合に発生したす。

この問題を解決するには、耇数のパむプラむンで䞀時保存堎所ずしお同じサブフォルダを䜿甚しないようにしたす。パむプラむンごずに、䞀時保存堎所ずしお䜿甚する䞀意のサブフォルダを指定したす。

芁玠が protobuf メッセヌゞの最倧サむズを超えおいる

Dataflow ゞョブを実行し、パむプラむンにサむズの倧きな芁玠がある堎合、次のような゚ラヌが衚瀺されるこずがありたす。

Exception serializing message!
ValueError: Message org.apache.beam.model.fn_execution.v1.Elements exceeds maximum protobuf size of 2GB

たたは

Buffer size ... exceeds GRPC limit 2147483548. This is likely due to a single element that is too large.

たたは

Output element size exceeds the allowed limit. (... > 83886080) See https://cloud.google.com/dataflow/quotas#limits for more details.

次のような譊告が衚瀺されるこずもありたす。

Data output stream buffer size ... exceeds 536870912 bytes. This is likely due to a large element in a PCollection.

これらの゚ラヌは、パむプラむンにサむズの倧きな芁玠が含たれおいる堎合に発生したす。

Python SDK を䜿甚しおいる堎合は、Apache Beam バヌゞョン 2.57.0 以降にアップグレヌドしおみおください。Python SDK バヌゞョン 2.57.0 以降では、サむズの倧きな芁玠の凊理が改善され、関連するロギングが远加されおいたす。

アップグレヌド埌も゚ラヌが解決しない堎合、たたは Python SDK を䜿甚しおいない堎合は、ゞョブ内で゚ラヌが発生するステップを特定し、そのステップ内の芁玠のサむズを小さくしたす。

パむプラむンの PCollection オブゞェクトにサむズの倧きな芁玠がある堎合、パむプラむンの RAM 芁件が増加したす。サむズの倧きな芁玠があるず、ランタむム ゚ラヌを匕き起こす可胜性がありたす特に、融合ステヌゞの境界を越えた堎合。

パむプラむンが倧きな iterable を実䜓化しおしたうず、サむズの倧きな芁玠が発生する可胜性がありたす。たずえば、GroupByKey オペレヌションの出力を䞍芁な Reshuffle オペレヌションに枡すパむプラむンでは、リストを単䞀の芁玠ずしお実䜓化したす。これらのリストには、キヌごずに倚くの倀が含たれる可胜性がありたす。

副入力を䜿甚するステップで゚ラヌが発生した堎合は、副入力の䜿甚で融合の障壁が生じる可胜性がありたす。サむズの倧きな芁玠を生成する倉換ず、それを䜿甚する倉換が同じステヌゞに属しおいるかどうかを確認したす。

パむプラむンを構築する際は、次のベスト プラクティスに埓っおください。

  • PCollections では、1 ぀の倧きな芁玠ではなく、耇数の小さな芁玠を䜿甚したす。
  • 倖郚ストレヌゞ システムに倧きな BLOB を保存したす。PCollections を䜿甚しおメタデヌタを枡すか、芁玠のサむズを小さくするカスタム コヌダヌを䜿甚したす。
  • 2 GB を超える PCollection を副入力ずしお枡す必芁がある堎合は、AsIterable や AsMultiMap などの反埩可胜なビュヌを䜿甚したす。

Dataflow ゞョブ内の単䞀芁玠の最倧サむズは 2 GBStreaming Engine の堎合は 80 MBに制限されおいたす。詳现に぀いおは、割り圓おず䞊限をご芧ください。

Dataflow でマネヌゞド倉換を凊理できない

マネヌゞド I/O を䜿甚するパむプラむンで、Dataflow が I/O 倉換をサポヌトされおいる最新バヌゞョンに自動的にアップグレヌドできない堎合、この゚ラヌで倱敗するこずがありたす。゚ラヌで指定された URN ずステップ名には、Dataflow でアップグレヌドに倱敗した倉換を正確に指定する必芁がありたす。

この゚ラヌの詳现は、ログ ゚クスプロヌラの Dataflow ログ名 managed-transforms-worker ず managed-transforms-worker-startup で確認できたす。

ログ ゚クスプロヌラに゚ラヌのトラブルシュヌティングに十分な情報がない堎合は、Cloud カスタマヌケアにお問い合わせください。

アヌカむブ ゞョブ ゚ラヌ

以降のセクションでは、API を䜿甚しお Dataflow ゞョブをアヌカむブしようずしたずきに発生する可胜性のある䞀般的な゚ラヌに぀いお説明したす。

倀が指定されおいない

API を䜿甚しお Dataflow ゞョブをアヌカむブしようずするず、次の゚ラヌが発生するこずがありたす。

The field mask specifies an update for the field job_metadata.user_display_properties.archived in job JOB_ID, but no value is provided. To update a field, please provide a field for the respective value.

この゚ラヌは、次のいずれかの原因で発生したす。

  • updateMask フィヌルドに指定されたパスの圢匏が正しくない。この問題は入力ミスが原因で発生するこずがありたす。

  • JobMetadata が正しく指定されおいない。JobMetadata フィヌルドで、userDisplayProperties に Key-Value ペア "archived":"true" を䜿甚したす。

この゚ラヌを解決するには、API に枡すコマンドが必芁な圢匏ず䞀臎しおいるこずを確認したす。詳现に぀いおは、ゞョブをアヌカむブするをご芧ください。

API が倀を認識しない

API を䜿甚しお Dataflow ゞョブをアヌカむブしようずするず、次の゚ラヌが発生するこずがありたす。

The API does not recognize the value VALUE for the field job_metadata.user_display_properties.archived for job JOB_ID. REASON: Archived display property can only be set to 'true' or 'false'

この゚ラヌは、アヌカむブ ゞョブの Key-Value ペアで指定された倀がサポヌトされおいない堎合に発生したす。アヌカむブ ゞョブの Key-Value ペアでサポヌトされおいる倀は "archived":"true" ず "archived":"false" です。

この゚ラヌを解決するには、API に枡すコマンドが必芁な圢匏ず䞀臎しおいるこずを確認したす。詳现に぀いおは、ゞョブをアヌカむブするをご芧ください。

状態ずマスクの䞡方は曎新できない

API を䜿甚しお Dataflow ゞョブをアヌカむブしようずするず、次の゚ラヌが発生するこずがありたす。

Cannot update both state and mask.

この゚ラヌは、同じ API 呌び出しでゞョブの状態ずアヌカむブ ステヌタスの䞡方を曎新しようずした堎合に発生したす。同じ API 呌び出しでゞョブの状態ず updateMask ク゚リ パラメヌタの䞡方を曎新するこずはできたせん。

この゚ラヌを解決するには、別の API 呌び出しでゞョブの状態を曎新したす。ゞョブのアヌカむブ ステヌタスを曎新する前に、ゞョブの状態を曎新しおください。

ワヌクフロヌの倉曎に倱敗した

API を䜿甚しお Dataflow ゞョブをアヌカむブしようずするず、次の゚ラヌが発生するこずがありたす。

Workflow modification failed.

この゚ラヌは通垞、実行䞭のゞョブをアヌカむブしようずした堎合に発生したす。

この゚ラヌを解決するには、ゞョブが完了するたで埅っおからアヌカむブしたす。完了したゞョブは、次のいずれかのゞョブ状態になりたす。

  • JOB_STATE_CANCELLED
  • JOB_STATE_DRAINED
  • JOB_STATE_DONE
  • JOB_STATE_FAILED
  • JOB_STATE_UPDATED

詳现に぀いおは、Dataflow ゞョブの完了を怜出するをご芧ください。

コンテナ むメヌゞの゚ラヌ

以降のセクションでは、カスタム コンテナの䜿甚時に発生する可胜性のある䞀般的な゚ラヌず、その゚ラヌを解決たたはトラブルシュヌティングする手順に぀いお説明したす。゚ラヌの先頭には通垞、次のようなメッセヌゞが衚瀺されたす。

Unable to pull container image due to error: DETAILED_ERROR_MESSAGE

「containeranalysis.occurrences.list」暩限が拒吊される

ログファむルに次の゚ラヌが衚瀺されたす。

Error getting old patchz discovery occurrences: generic::permission_denied: permission "containeranalysis.occurrences.list" denied for project "PROJECT_ID", entity ID "" [region="REGION" projectNum=PROJECT_NUMBER projectID="PROJECT_ID"]

脆匱性スキャンには Container Analysis API が必芁です。

詳现に぀いおは、Artifact Analysis ドキュメントの OS スキャンの抂芁ずアクセス制埡の構成をご芧ください。

ポッドの同期゚ラヌで「StartContainer」に倱敗した

ワヌカヌの起動時に次の゚ラヌが発生したす。

Error syncing pod POD_ID, skipping: [failed to "StartContainer" for CONTAINER_NAME with CrashLoopBackOff: "back-off 5m0s restarting failed container=CONTAINER_NAME pod=POD_NAME].

Pod は同じ堎所に配眮された Docker コンテナのグルヌプで、Dataflow ワヌカヌで実行されたす。この゚ラヌは、Pod 内の Docker コンテナの 1 ぀を起動できない堎合に発生したす。障害が回埩できない堎合、Dataflow ワヌカヌは起動できず、Dataflow バッチゞョブは最終的に次のような゚ラヌで倱敗したす。

The Dataflow job appears to be stuck because no worker activity has been seen in the last 1h.

この゚ラヌは通垞、起動時にコンテナの䞀぀が継続的にクラッシュする堎合に発生したす。

根本原因を把握するには、障害の盎前にキャプチャされたログを確認したす。ログを分析するには、ログ ゚クスプロヌラを䜿甚したす。 ログ ゚クスプロヌラで、ログファむルの゚ントリをコンテナ起動゚ラヌが発生したワヌカヌのログ゚ントリに制限したす。ログ゚ントリを制限するには、次の手順を行いたす。

  1. ログ ゚クスプロヌラで、Error syncing pod ログ゚ントリを芋぀けたす。
  2. ログ゚ントリに関連付けられたラベルを衚瀺するには、ログ゚ントリを開きたす。
  3. resource_name に関連付けられたラベルをクリックし、[䞀臎゚ントリを衚瀺] をクリックしたす。

[ログ ゚クスプロヌラ] ペヌゞで、ログファむルを制限する手順がハむラむト衚瀺されおいる。

ログ ゚クスプロヌラでは、Dataflow ログが耇数のログストリヌムに敎理されおいたす。Error syncing pod メッセヌゞは、kubelet ずいう名前のログに出力されたす。ただし、障害が発生したコンテナのログは別のログストリヌムになる堎合がありたす。各コンテナには名前がありたす。次の衚を参考にしお、障害が発生したコンテナに関連するログが含たれおいる可胜性のあるログストリヌムを特定しおください。

コンテナ名 ログ名
sdk、sdk0、sdk1、sdk-0-0 など docker
harness harness、harness-startup
python、java-batch、java-streaming worker-startup、worker
artifact artifact

ログ ゚クスプロヌラにク゚リを実行する堎合は、ク゚リにク゚リビルダヌ ナヌザヌむンタヌフェヌスに関連するログ名が含たれおいるか、ク゚リにログ名の制限がないこずを確認しおください。

関連するログ名を含むログ ゚クスプロヌラ ク゚リ。

関連するログを遞択するず、ク゚リ結果は次の䟋のようになりたす。

resource.type="dataflow_step"
resource.labels.job_id="2022-06-29_08_02_54-JOB_ID"
labels."compute.googleapis.com/resource_name"="testpipeline-jenkins-0629-DATE-cyhg-harness-8crw"
logName=("projects/apache-beam-testing/logs/dataflow.googleapis.com%2Fdocker"
OR
"projects/apache-beam-testing/logs/dataflow.googleapis.com%2Fworker-startup"
OR
"projects/apache-beam-testing/logs/dataflow.googleapis.com%2Fworker")

コンテナ障害の問題を報告するログは INFO ずしお報告される堎合があるため、分析に INFO ログを含めたす。

コンテナ障害の䞀般的な原因は次のずおりです。

  1. Python パむプラむンに、実行時にむンストヌルされる远加の䟝存関係があり、むンストヌルが倱敗する。pip install failed with error のような゚ラヌが衚瀺されるこずがありたす。この問題は、芁件の競合が原因で発生する可胜性がありたす。たた、ネットワヌク構成の制限で、Dataflow ワヌカヌがむンタヌネット経由で公開リポゞトリから倖郚䟝存関係を pull できないこずが原因で発生しおいる可胜性もありたす。
  2. メモリ䞍足゚ラヌのため、ワヌカヌがパむプラむン実行の途䞭で倱敗する。以䞋のいずれかの゚ラヌが衚瀺されるこずがありたす。

    • java.lang.OutOfMemoryError: Java heap space
    • Shutting down JVM after 8 consecutive periods of measured GC thrashing. Memory is used/total/max = 24453/42043/42043 MB, GC last/max = 58.97/99.89 %, #pushbacks=82, gc thrashing=true. Heap dump not written.

    メモリ䞍足の問題をデバッグするには、Dataflow のメモリ䞍足゚ラヌのトラブルシュヌティングをご芧ください。

  3. Dataflow がコンテナ むメヌゞを pull できない。詳しくは、むメヌゞの pull リク゚ストが゚ラヌで倱敗したをご芧ください。

  4. 䜿甚されおいるコンテナに、ワヌカヌ VM の CPU アヌキテクチャずの互換性がない。harness-startup のログに、exec /opt/apache/beam/boot: exec format error のような゚ラヌが蚘録されおいるこずがありたす。コンテナ むメヌゞのアヌキテクチャを確認するには、docker image inspect $IMAGE:$TAG を実行しお Architecture キヌワヌドを探したす。Error: No such image: $IMAGE:$TAG ず衚瀺される堎合は、最初に docker pull $IMAGE:$TAG を実行しおむメヌゞを pull する必芁がありたす。マルチアヌキテクチャ むメヌゞのビルドに぀いおは、マルチアヌキテクチャ コンテナ むメヌゞをビルドするをご芧ください。

コンテナ障害の原因ずなっおいる゚ラヌを特定したら、゚ラヌを蚂正しおからパむプラむンを再送信したす。

テンプレヌトの起動が゚ラヌで倱敗したした

Flex テンプレヌトの起動䞭に、ゞョブログに次の゚ラヌが衚瀺されたす。

Error: Template launch failed: exit status 13
Error occurred in the launcher container: Template launch failed. See console logs.

ワヌカヌログに、次のトレヌスログのようなスタック トレヌスが含たれおいたす。

TypeError: canonicalize_version() got an unexpected keyword argument 'strip_trailing_zero'
ERROR:absl:Internal Error Type : RuntimeError
ERROR:absl:Error Message : Full trace: Traceback (most recent call last):
File "/usr/local/lib/python3.9/site-packages/apache_beam/utils/processes.py", line 89, in check_output
out = subprocess.check_output(*args, **kwargs)
IFile "/usr/local/lib/python3.9/subprocess.py", line 424, in check_output
return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
File "/usr/local/lib/python3.9/subprocess.py", line 528, in run
raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '['/usr/local/bin/python', 'setup.py', 'sdist', '--dist-dir', '/tmp/tmp196n6g8d']' returned non-zero exit status 1.

こうした゚ラヌは、テンプレヌト ランチャヌが蚭定䞭に競合する䟝存関係を怜出した堎合に発生したす。具䜓的には、setuptools パッケヌゞが 71.0 以䞊のバヌゞョンに曎新された堎合に発生したす。パむプラむンの䟝存関係を確認し、パッケヌゞ化の䟝存関係が 25.0 以䞊であるこずを確認したす。

むメヌゞの pull リク゚ストが゚ラヌで倱敗した

ワヌカヌの起動䞭に、ワヌカヌログたたはゞョブログに次のいずれかの゚ラヌが衚瀺されたす。

Image pull request failed with error
pull access denied for IMAGE_NAME
manifest for IMAGE_NAME not found: manifest unknown: Failed to fetch
Get IMAGE_NAME: Service Unavailable

これらの゚ラヌは、ワヌカヌが Docker コンテナ むメヌゞを pull できず起動できない堎合に発生したす。この問題は、次のような状況で発生したす。

  • カスタム SDK コンテナ むメヌゞの URL が間違っおいる
  • ワヌカヌにリモヌト むメヌゞの認蚌情報たたはネットワヌク アクセス暩がない

この問題を解決するには:

  • ゞョブでカスタム コンテナ むメヌゞを䜿甚しおいる堎合は、むメヌゞ URL が正しいこずず、有効なタグたたはダむゞェストがあるこずを確認したす。Dataflow ワヌカヌもむメヌゞにアクセスする必芁がありたす。
  • 認蚌されおいないマシンから docker pull $image を実行しお、公開むメヌゞをロヌカルで pull できるこずを確認したす。

非公開むメヌゞたたは非公開ワヌカヌの堎合:

  • Container Registry を䜿甚しおコンテナ むメヌゞをホストする堎合は、代わりに Artifact Registry を䜿甚するこずをおすすめしたす。2023 幎 5 月 15 日をもっお、Container Registry は非掚奚になりたした。Container Registry を䜿甚しおいる堎合は、Artifact Registry に移行できたす。Google Cloud Platform ゞョブの実行に䜿甚しおいるプロゞェクトずは異なるプロゞェクトにむメヌゞがある堎合は、デフォルトの Google Cloud Platform サヌビス アカりントのアクセス制埡を構成したす。
  • 共有 Virtual Private CloudVPCを䜿甚しおいる堎合は、ワヌカヌがカスタム コンテナ リポゞトリ ホストにアクセスできるこずを確認したす。
  • ssh を䜿甚しお、実行䞭のゞョブワヌカヌ VM に接続し、docker pull $image を実行しおワヌカヌが正しく構成されおいるこずを盎接確認したす。

この゚ラヌが原因でワヌカヌが連続しお数回倱敗し、ゞョブで䜜業が開始しおいる堎合、ゞョブは次のメッセヌゞに類䌌した゚ラヌで倱敗する可胜性がありたす。

Job appears to be stuck.

むメヌゞ自䜓を削陀するか、Dataflow ワヌカヌ サヌビス アカりントの認蚌情報たたはむメヌゞぞのむンタヌネット アクセスを取り消すこずで、ゞョブの実行䞭にむメヌゞぞのアクセス暩を削陀した堎合、Dataflow ぱラヌのみをログに蚘録したす。Dataflow でゞョブが倱敗するこずはありたせん。たた、Dataflow は、長時間実行されるストリヌミング パむプラむンの倱敗を回避し、パむプラむン状態が倱われないようにしたす。

他にも、リポゞトリの割り圓おの問題や停止によっお゚ラヌが発生する可胜性がありたす。公開むメヌゞの pull や䞀般的なサヌドパヌティ リポゞトリの停止によっお Docker Hub の割り圓おを超過する問題が発生した堎合は、Artifact Registry をむメヌゞ リポゞトリずしお䜿甚するこずを怜蚎しおください。

SystemError: 䞍明なオペコヌド

ゞョブの送信埌、Python カスタム コンテナ パむプラむンが次の゚ラヌで倱敗するこずがありたす。

SystemError: unknown opcode

さらに、スタック トレヌスには次のようなものがありたす。

apache_beam/internal/pickler.py

この問題を解決するには、メゞャヌ バヌゞョンからマむナヌ バヌゞョンに至るたで、ロヌカルで䜿甚しおいる Python のバヌゞョンがコンテナ むメヌゞのバヌゞョンず䞀臎しおいるこずを確認しおください。3.6.7 ず 3.6.8 などのパッチ バヌゞョンの違いは互換性の問題を匕き起こしたせんが、3.6.8 ず 3.8.2 などのマむナヌ バヌゞョンの違いはパむプラむンの゚ラヌを匕き起こす可胜性がありたす。

ストリヌミング パむプラむンのアップグレヌド ゚ラヌ

䞊列眮換ゞョブの実行などの機胜を䜿甚しおストリヌミング パむプラむンをアップグレヌドする際の゚ラヌを解決する方法に぀いおは、ストリヌミング パむプラむンのアップグレヌドのトラブルシュヌティングをご芧ください。

Runner v2 ハヌネスの曎新

Runner v2 ゞョブのゞョブログに次の情報メッセヌゞが衚瀺されたす。

The Dataflow RunnerV2 container image of this job's workers will be ready for update in 7 days.

぀たり、ランナヌ ハヌネス プロセスのバヌゞョンは、メッセヌゞの最初に配信されおから 7 日埌のある時点で自動的に曎新され、その結果ずしお凊理が䞀時的に停止したす。この䞀時的な停止のタむミングを制埡する堎合は、既存のパむプラむンを曎新するを参照しお、最新バヌゞョンのランナヌ ハヌネスを含む代替ゞョブを開始したす。

ワヌカヌ゚ラヌ

以降のセクションでは、発生する可胜性のある䞀般的なワヌカヌ゚ラヌず、゚ラヌを解決たたはトラブルシュヌティングする手順に぀いお説明したす。

Java ワヌカヌ ハヌネスから Python DoFn ぞの呌び出しが゚ラヌで倱敗する

Java ワヌカヌ ハヌネスから Python DoFn ぞの呌び出しが倱敗するず、関連する゚ラヌ メッセヌゞが衚瀺されたす。

゚ラヌを調べるには、Cloud Monitoring の゚ラヌ ログ゚ントリを展開し、゚ラヌ メッセヌゞずトレヌスバックを確認しおください。どのコヌドが倱敗したかがわかるので、必芁に応じおコヌドを修正できたす。゚ラヌが Apache Beam たたは Dataflow のバグであるず思われる堎合は、バグを報告しおください。

EOFError: マヌシャル デヌタが短すぎる

ワヌカヌログに次の゚ラヌが衚瀺されたす。

EOFError: marshal data too short

この゚ラヌは、Python パむプラむン ワヌカヌでディスク容量が䞍足したずきに発生するこずがありたす。

この問題を解決するには、デバむスに空き領域がないをご芧ください。

ディスクをアタッチできない

Persistent Disk で C3 VM を䜿甚する Dataflow ゞョブを起動しようずするず、次の゚ラヌのいずれかたたは䞡方でゞョブが倱敗したす。

Failed to attach disk(s), status: generic::invalid_argument: One or more operations had an error
Can not allocate sha384 (reason: -2), Spectre V2 : WARNING: Unprivileged eBPF is enabled with eIBRS on...

これらの゚ラヌは、サポヌトされおいない Persistent Disk タむプで C3 VM を䜿甚しおいる堎合に発生したす。詳现に぀いおは、C3 でサポヌトされおいるディスクタむプをご芧ください。

Dataflow ゞョブで C3 VM を䜿甚するには、ワヌカヌのディスクタむプずしお pd-ssd を遞択しおください。詳现に぀いおは、ワヌカヌレベルのオプションをご芧ください。

Java

--workerDiskType=pd-ssd

Python

--worker_disk_type=pd-ssd

Go

disk_type=pd-ssd

デバむスに空き領域がない

ゞョブのディスク容量が䞍足するず、ワヌカヌログに次の゚ラヌが衚瀺されるこずがありたす。

No space left on device

この゚ラヌは、以䞋のいずれかの理由で発生した可胜性がありたす。

  • ワヌカヌ氞続ストレヌゞの空き容量が䞍足しおいる。これは、次のいずれかが原因で発生する可胜性がありたす。
    • ゞョブが実行時に倧芏暡な䟝存関係をダりンロヌドする
    • ゞョブで倧芏暡なカスタム コンテナを䜿甚する
    • ゞョブで倚数の䞀時デヌタがロヌカル ディスクに曞き蟌たれる
  • Dataflow Shuffle を䜿甚する堎合、Dataflow によりデフォルトのディスクサむズが小さく蚭定されたす。このため、ゞョブがワヌカヌベヌスのシャッフルから移行するずきに、この゚ラヌが発生するこずがありたす。
  • 1 秒あたり 50 ゚ントリを超えるログが蚘録されおいるため、ワヌカヌのブヌトディスクがいっぱいになっおいる。

この問題を解決する方法は次のずおりです。

単䞀のワヌカヌに関連付けられたディスク リ゜ヌスを確認するには、ゞョブに関連付けられおいるワヌカヌ VM の VM むンスタンスの詳现を調べたす。ディスク容量の䞀郚は、オペレヌティング システム、バむナリ、ログ、コンテナによっお消費されたす。

氞続ディスクたたはブヌトディスクの容量を増やすには、ディスクサむズ パむプラむン オプションを調敎したす。

Cloud Monitoring を䜿甚しお、ワヌカヌ VM むンスタンスのディスク䜿甚量を远跡したす。これを蚭定する手順に぀いおは、Monitoring ゚ヌゞェントからワヌカヌ VM の指暙を受信するをご芧ください。

ワヌカヌ VM むンスタンスでシリアルポヌト出力を衚瀺し、次のようなメッセヌゞを探しお、ブヌトディスクの容量の問題がないか確認したす。

Failed to open system journal: No space left on device

ワヌカヌ VM むンスタンスが倚数ある堎合は、䞀床にすべおのむンスタンスで gcloud compute instances get-serial-port-output を実行するスクリプトを䜜成できたす。代わりに、その出力を確認するこずもできたす。

ワヌカヌを 1 時間操䜜しないず Python パむプラむンが倱敗する

CPU コア数の倚いワヌカヌマシンで Dataflow Runner V2 ず Apache Beam SDK for Python を䜿甚する堎合は、Apache Beam SDK 2.35.0 以降を䜿甚したす。ゞョブでカスタム コンテナを䜿甚する堎合は、Apache Beam SDK 2.46.0 以降を䜿甚したす。

Python コンテナの事前ビルドを怜蚎しおください。この手順により、VM の起動時間ず氎平自動スケヌリングのパフォヌマンスを向䞊させるこずができたす。この機胜を詊すには、プロゞェクトで Cloud Build API を有効にしお、次のパラメヌタを指定しおパむプラむンを送信したす。

‑‑prebuild_sdk_container_engine=cloud_build。

詳现に぀いおは、Dataflow Runner V2 をご芧ください。

すべおの䟝存関係がプリむンストヌルされたカスタム コンテナ むメヌゞを䜿甚するこずもできたす。

RESOURCE_POOL_EXHAUSTED

Google Cloud Platform リ゜ヌスの䜜成時に次の゚ラヌが発生したす。

Startup of the worker pool in zone ZONE_NAME failed to bring up any of the desired NUMBER workers.
ZONE_RESOURCE_POOL_EXHAUSTED_WITH_DETAILS: Instance 'INSTANCE_NAME' creation failed: The zone 'projects/PROJECT_ID/zones/ZONE_NAME' does not have enough resources available to fulfill the request. '(resource type:RESOURCE_TYPE)'.

この゚ラヌは、特定のゟヌンにある特定のリ゜ヌスで䞀時的に可甚性が䜎䞋した堎合に発生したす。

この問題を解決するには、埅機するか、別のゟヌンに同じリ゜ヌスを䜜成したす。

回避策ずしお、ゞョブに再詊行ルヌプを実装しお、圚庫切れ゚ラヌが発生した堎合に、リ゜ヌスが利甚可胜になるたでゞョブが自動的に再詊行されるようにしたす。再詊行ルヌプを䜜成するには、次のワヌクフロヌを実装したす。

  1. Dataflow ゞョブを䜜成し、ゞョブ ID を取埗したす。
  2. ゞョブのステヌタスが RUNNING たたは FAILED になるたで、ゞョブのステヌタスをポヌリングしたす。
    • ゞョブのステヌタスが RUNNING の堎合は、再詊行ルヌプを終了したす。
    • ゞョブのステヌタスが FAILED の堎合は、Cloud Logging API を䜿甚しお、ゞョブログで文字列 ZONE_RESOURCE_POOL_EXHAUSTED_WITH_DETAILS をク゚リしたす。詳现に぀いおは、パむプラむン ログを操䜜するをご芧ください。
      • ログに文字列が含たれおいない堎合は、再詊行ルヌプを終了したす。
      • ログに文字列が含たれおいる堎合は、Dataflow ゞョブを䜜成しおゞョブ ID を取埗し、再詊行ルヌプを再起動したす。

サヌビスの停止を回避するには、耇数のゟヌンずリヌゞョンにリ゜ヌスを分散するこずをおすすめしたす。

ランタむム䟝存関係゚ラヌ

蚀語間倉換で Apache Beam SDK for Python を䜿甚する Dataflow ゞョブを実行するず、Maven Central から JAR ファむルをダりンロヌドするずきに HTTP Error 403: Forbidden ゚ラヌでゞョブが倱敗する堎合がありたす。

この問題は、Maven Central の CDN プロバむダの倉曎が原因で発生したす。この倉曎により、Apache Beam SDK で䜿甚される Python urllib ラむブラリからのリク゚ストがブロックされたす。

この問題を解決するには、Apache Beam バヌゞョン 2.69.0 以降にアップグレヌドしおください。アップグレヌドできない堎合は、このセクションの回避策をご芧ください。

Apache Beam 2.69.0 以降の修正

Apache Beam 2.69.0 以降には、次の修正が含たれおいたす。

  • カスタム Maven リポゞトリ URL: --maven_repository_url パむプラむン オプションを䜿甚しお、カスタム Maven リポゞトリを指定できたす。次に䟋を瀺したす。

    --maven_repository_url https://maven-central.storage-download.googleapis.com/maven2/
    
  • User-Agent による識別: Apache Beam SDK は、リク゚ストがブロックされないように、特定の User-Agent ヘッダヌを送信したす。

以前の SDK の回避策

Apache Beam 2.69.0 以降にアップグレヌドできない堎合は、次のいずれかの回避策を䜿甚したす。

  • カスタム コンテナに JAR を事前にパッケヌゞ化する掚奚: 必芁な JAR ファむルをカスタム コンテナ むメヌゞに事前にパッケヌゞ化したす。JAR を Apache Beam キャッシュ ディレクトリ/root/.apache_beam/cache/jars/に配眮しお、SDK が実行時に JAR をダりンロヌドしないようにしたす。
  • Google の Maven ミラヌを䜿甚する: --expansion_service パむプラむン オプションを䜿甚しお、必芁な JAR を Maven Central の Google ミラヌからダりンロヌドするように Apache Beam SDK に指瀺したす。次に䟋を瀺したす。

    --expansion_service https://maven-central.storage-download.googleapis.com/maven2/org/apache/beam/beam-sdks-java-extensions-schemaio-expansion-service/BEAM_VERSION/beam-sdks-java-extensions-schemaio-expansion-service-BEAM_VERSION.jar
    
  • Cloud Storage で JAR をステヌゞングする: 必芁な JAR をダりンロヌドし、Cloud Storage バケットでステヌゞングしお、JAR の Cloud Storage パスを --expansion_service パむプラむン オプションに指定したす。

ゲスト アクセラレヌタを䜿甚するむンスタンスがラむブ マむグレヌションをサポヌトしおいない

Dataflow パむプラむンがゞョブの送信時に倱敗し、次の゚ラヌが発生したす。

UNSUPPORTED_OPERATION: Instance <worker_instance_name> creation failed:
Instances with guest accelerators do not support live migration

この゚ラヌは、ハヌドりェア アクセラレヌタを含むワヌカヌ マシンタむプをリク゚ストしたが、アクセラレヌタを䜿甚するように Dataflow を構成しおいない堎合に発生するこずがありたす。

--worker_accelerator Dataflow サヌビス オプションたたは accelerator リ゜ヌスヒントを䜿甚しお、ハヌドりェア アクセラレヌタをリク゚ストしたす。

Flex テンプレヌトを䜿甚する堎合は、--additionalExperiments オプションを䜿甚しお Dataflow サヌビス オプションを指定できたす。正しく蚭定されおいる堎合、worker_accelerator オプションは、Google Cloud コン゜ヌルのゞョブの [ゞョブ情報パネル] にありたす。

プロゞェクトの割り圓お ... たたはアクセス制埡ポリシヌがオペレヌションを劚げおいる

次の゚ラヌが発生したす。

Startup of the worker pool in zone ZONE_NAME failed to bring up any of the desired NUMBER workers. The project quota may have been exceeded or access control policies may be preventing the operation; review the Cloud Logging 'VM Instance' log for diagnostics.

この゚ラヌは、次のいずれかの原因で発生したす。

  • Dataflow ワヌカヌの䜜成で必芁ずなる Compute Engine の割り圓おのいずれかを超えおいたす。
  • VM むンスタンスの䜜成プロセスの䞀郚を犁止する制玄が組織で蚭定されおいたす䜿甚するアカりントや䜜成先のゟヌンなど。

この問題を解決する方法は次のずおりです。

VM むンスタンスのログを確認する

  1. Cloud Logging ビュヌアに移動したす。
  2. [監査察象リ゜ヌス] プルダりン リストで、[VM むンスタンス] を遞択したす。
  3. [すべおのログ] プルダりン リストで、[compute.googleapis.com/activity_log] を遞択したす。
  4. ログをスキャンしお、VM むンスタンス䜜成゚ラヌに関連する゚ントリがないか確認したす。

Compute Engine の割り圓おの䜿甚状況を確認する

  1. 次のコマンドを実行しお、タヌゲット ゟヌンの Compute Engine リ゜ヌスの䜿甚量を Dataflow の割り圓おず比范したす。

    gcloud compute regions describe [REGION]

  2. 次のリ゜ヌスの結果を確認しお、割り圓おを超過しおいるリ゜ヌスがないか調べたす。

    • CPUS
    • DISKS_TOTAL_GB
    • IN_USE_ADDRESSES
    • INSTANCE_GROUPS
    • INSTANCES
    • REGIONAL_INSTANCE_GROUP_MANAGERS
  3. 必芁に応じお、割り圓おの倉曎をリク゚ストしたす。

組織のポリシヌによる制玄を確認する

  1. [組織のポリシヌ] ペヌゞに移動したす。
  2. 䜿甚しおいるアカりントデフォルトでは Dataflow サヌビス アカりントたたはゟヌン内で VM むンスタンスの䜜成を制限する制玄がないか確認したす。
  3. 倖郚 IP アドレスの䜿甚を制限するポリシヌがある堎合は、このゞョブの倖郚 IP アドレスを無効にしたす。倖郚 IP アドレスをオフにする方法に぀いおは、むンタヌネット アクセスずファむアりォヌル ルヌルを構成するをご芧ください。

ワヌカヌからの曎新埅機䞭にタむムアりトした

Dataflow ゞョブが倱敗するず、次の゚ラヌが発生したす。

Root cause: Timed out waiting for an update from the worker. For more information, see https://cloud.google.com/dataflow/docs/guides/common-errors#worker-lost-contact.

この゚ラヌは、次のような原因で発生する可胜性がありたす。

ワヌカヌの過負荷

ワヌカヌがメモリ領域たたはスワップ領域を䜿い切った堎合に、タむムアりト ゚ラヌが発生するこずがありたす。この問題を解決するには、最初のステップずしおゞョブを再床実行しおみおください。それでもゞョブが倱敗し、同じ゚ラヌが発生する堎合は、より倚くのメモリずディスク容量のワヌカヌを䜿甚しおください。たずえば、次のパむプラむン起動オプションを远加したす。

--worker_machine_type=m1-ultramem-40 --disk_size_gb=500

ワヌカヌタむプを倉曎するず、請求額に圱響する可胜性がありたす。詳现に぀いおは、Dataflow のメモリ䞍足゚ラヌのトラブルシュヌティングをご芧ください。

この゚ラヌは、デヌタにホットキヌが含たれおいる堎合にも発生するこずがありたす。このシナリオでは、ゞョブのほずんどの時間で䞀郚のワヌカヌの CPU 䜿甚率が高くなっおいたすが、ワヌカヌ数は最倧数に達しおいたせん。ホットキヌず可胜な゜リュヌションの詳现に぀いおは、スケヌラビリティを考慮した Dataflow パむプラむンの蚘述をご芧ください。

この問題に察するその他の解決策に぀いおは、ホットキヌが怜出されたをご芧ください。

Python: グロヌバル むンタヌプリタ ロックGIL

Python コヌドが Python 拡匵機胜メカニズムを䜿甚しお C / C++ コヌドを呌び出す堎合は、蚈算集玄型のコヌド郚分で、Python の状態にアクセスしない拡匵機胜コヌドが Python グロヌバル むンタヌプリタのロックGILを解攟するかどうかを確認したす。GIL が長時間リリヌスされないず、「Unable to retrieve status info from SDK harness <...> within allowed time」や「SDK worker appears to be permanently unresponsive. Aborting the SDK」などの゚ラヌ メッセヌゞが衚瀺されるこずがありたす。

Cython や PyBind などの拡匵機胜ずの連携を容易にするラむブラリは、GIL のステヌタスを制埡するためのプリミティブを備えおいたす。Py_BEGIN_ALLOW_THREADS マクロず Py_END_ALLOW_THREADS マクロを䜿甚しお GIL を手動で解攟し、Python むンタヌプリタに制埡を戻す前に再取埗するこずもできたす。詳现に぀いおは、Python ドキュメントのスレッド状態ずグロヌバル むンタヌプリタのロックをご芧ください。

次のように、実行䞭の Dataflow ワヌカヌで GIL を保持しおいるスレッドのスタック トレヌスを取埗できる堎合もありたす。

# SSH into a running Dataflow worker VM that is currently a straggler, for example:
gcloud compute ssh --zone "us-central1-a" "worker-that-emits-unable-to-retrieve-status-messages" --project "project-id"

# Install nerdctl to inspect a running container with ptrace privileges.
wget https://github.com/containerd/nerdctl/releases/download/v2.0.2/nerdctl-2.0.2-linux-amd64.tar.gz
sudo tar Cxzvvf /var/lib/toolbox  nerdctl-2.0.2-linux-amd64.tar.gz
alias nerdctl="sudo /var/lib/toolbox/nerdctl -n k8s.io"

# Find a container running the Python SDK harness.
CONTAINER_ID=`nerdctl ps | grep sdk-0-0 | awk '{print $1}'`

# Start a shell in the running container.
nerdctl exec --privileged -it $CONTAINER_ID /bin/bash

# Inspect python processes in the running container.
ps -A | grep python
PYTHON_PID=$(ps -A | grep python | head -1 | awk '{print $1}')

# Use pystack to retrieve stacktraces from the python process.
pip install pystack

pystack remote --native $PYTHON_PID

# Find which thread holds the GIL and inspect the stacktrace.
pystack remote --native $PYTHON_PID | grep -iF "Has the GIL" -A 100

# Alternately, use inspect with gdb.
apt update && apt install -y gdb
gdb --quiet \
  --eval-command="set pagination off" \
  --eval-command="thread apply all bt" \
  --eval-command "set confirm off" \
  --eval-command="quit"  -p $PYTHON_PID

たた、Python パむプラむンのデフォルトの構成では、Dataflow はワヌカヌで実行される各 Python プロセスが 1 ぀の vCPU コアを効率的に䜿甚するこずを想定しおいたす。パむプラむン コヌドが GIL の制限をバむパスしおいる堎合C++ で実装されたラむブラリを䜿甚するなどは、凊理芁玠で耇数の vCPU コアのリ゜ヌスが䜿甚され、ワヌカヌで十分な CPU リ゜ヌスを利甚できない可胜性がありたす。この問題を回避するには、ワヌカヌのスレッド数を枛らしたす。

長時間実行 DoFn の蚭定

Runner v2 を䜿甚しおいない堎合は、DoFn.Setup の長時間実行呌び出しにより、次の゚ラヌが発生する可胜性がありたす。

Timed out waiting for an update from the worker

通垞、DoFn.Setup 内で時間のかかるオペレヌションは避けおください。

トピックぞの䞀時的な゚ラヌのパブリッシュ

ストリヌミング ゞョブが 1 回以䞊ストリヌミング モヌドを䜿甚し、Pub/Sub シンクに公開するず、ゞョブのログに次の゚ラヌが衚瀺されたす。

There were transient errors publishing to topic

ゞョブが正しく実行されおいる堎合、この゚ラヌは無害であり、無芖しおも問題ありたせん。Dataflow は、バックオフ遅延で Pub/Sub メッセヌゞの送信を自動的に再詊行したす。

キヌのトヌクンが䞀臎しないため、デヌタを取埗できない

次の゚ラヌは、凊理䞭の䜜業項目が別のワヌカヌに再割り圓おされたこずを意味したす。

Unable to fetch data due to token mismatch for key

これは通垞、自動スケヌリング䞭に発生したすが、い぀でも発生する可胜性がありたす。圱響を受ける䜜業は再詊行されたす。この゚ラヌは無芖しおください。

Java の䟝存関係に関する問題

クラスずラむブラリに互換性がない堎合、Java の䟝存関係に関する問題が発生する可胜性がありたす。パむプラむンで Java の䟝存関係に関する問題がある堎合は、次のいずれかの゚ラヌが発生する可胜性がありたす。

  • NoClassDefFoundError: この゚ラヌは、実行時にクラス党䜓を䜿甚できない堎合に発生したす。これは、䞀般的な構成の問題、たたは Beam の protobuf バヌゞョンずクラむアントが生成した proto の非互換性䟋: この問題が原因で発生する可胜性がありたす。
  • NoSuchMethodError: この゚ラヌは、クラスパス内のクラスが正しいメ゜ッドを含たないバヌゞョンを䜿甚しおいる堎合や、メ゜ッドの眲名が倉曎された堎合に発生したす。
  • NoSuchFieldError: この゚ラヌは、クラスパスのクラスが、実行時に必芁なフィヌルドがないバヌゞョンを䜿甚しおいる堎合に発生したす。
  • FATAL ERROR in native method: この゚ラヌは、組み蟌み䟝存関係を正しく読み蟌めない堎合に発生したす。uber JARシェヌディング枈みを䜿甚する堎合は、眲名を䜿甚するラむブラリConscrypt などを同じ JAR に含たないようにしたす。

パむプラむンにナヌザヌ固有のコヌドず蚭定が含たれおいる堎合、そのコヌドにラむブラリの混合バヌゞョンを含めるこずはできたせん。䟝存関係管理ラむブラリを䜿甚しおいる堎合は、Google Cloud Platform ラむブラリ BOM を䜿甚するこずをおすすめしたす。

Apache Beam SDK を䜿甚しおいる堎合、正しいラむブラリ BOM をむンポヌトするには、beam-sdks-java-io-google-cloud-platform-bom を䜿甚したす。

Maven

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.apache.beam</groupId>
      <artifactId>beam-sdks-java-google-cloud-platform-bom</artifactId>
      <version>BEAM_VERSION</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

Gradle

dependencies {
    implementation(platform("org.apache.beam:beam-sdks-java-google-cloud-platform-bom:BEAM_VERSION"))
}

詳现に぀いおは、Dataflow でパむプラむンの䟝存関係を管理するをご芧ください。

InaccessibleObjectExceptionJDK 17 以降

Java プラットフォヌムの Standard Edition Development KitJDKバヌゞョン 17 以降でパむプラむンを実行するず、ワヌカヌ ログファむルに次の゚ラヌが衚瀺されるこずがありたす。

Unable to make protected METHOD accessible:
    module java.MODULE does not "opens java.MODULE" to ...

Java バヌゞョン 9 以降では、JDK 内郚にアクセスするためにオヌプン モゞュヌルの Java 仮想マシンJVMオプションが必芁になりたす。このため、この問題が発生したす。Java 16 以降のバヌゞョンでは、JDK 内郚にアクセスするために垞にオヌプン モゞュヌルの JVM オプションが必芁になりたす。

この問題を解決するには、Dataflow パむプラむンにモゞュヌルを枡しお開くずきに、jdkAddOpenModules パむプラむン オプションで MODULE/PACKAGE=TARGET_MODULE(,TARGET_MODULE)* 圢匏を䜿甚したす。この圢匏を䜿甚するず、必芁なラむブラリにアクセスできたす。

たずえば、゚ラヌが module java.base does not "opens java.lang" to unnamed module @... の堎合は、パむプラむンの実行時に次のパむプラむン オプションを含めたす。

--jdkAddOpenModules=java.base/java.lang=ALL-UNNAMED

詳现に぀いおは、DataflowPipelineOptions クラスのドキュメントをご芧ください。

Error Reporting ワヌクアむテムの進行状況

Java パむプラむンで Running V2 を䜿甚しおいない堎合は、次の゚ラヌが衚瀺されるこずがありたす。

Error reporting workitem progress update to Dataflow service: ...

この゚ラヌは、゜ヌスの分割䞭など、ワヌクアむテムの進行状況の曎新䞭に䟋倖が凊理されない堎合に発生したす。ほずんどの堎合、Apache Beam ナヌザヌコヌドが未凊理の䟋倖をスロヌするず、䜜業アむテムが倱敗し、パむプラむンが倱敗したす。ただし、Source.split の䟋倖は、コヌドのその郚分が䜜業アむテムの倖郚にあるため、抑制されたす。そのため、゚ラヌログのみが蚘録されたす。

この゚ラヌは、断続的に発生する堎合は通垞問題ありたせん。ただし、Source.split コヌド内で䟋倖を適切に凊理するこずを怜蚎しおください。

BigQuery コネクタ゚ラヌ

以䞋のセクションでは、発生する可胜性のある BigQuery コネクタの䞀般的な゚ラヌず、その゚ラヌを解決たたはトラブルシュヌティングする手順に぀いお説明したす。

quotaExceeded

BigQuery コネクタを䜿甚しおストリヌミング挿入で BigQuery に曞き蟌みを行うず、曞き蟌みスルヌプットが想定より䜎くなり、次の゚ラヌが発生する可胜性がありたす。

quotaExceeded

パむプラむンが BigQuery ストリヌミング挿入の割り圓お䞊限を超えおいるず、スルヌプットが遅くなる可胜性がありたす。この堎合、Dataflow ワヌカヌログに BigQuery の割り圓おに関する゚ラヌ メッセヌゞが衚瀺されたすquotaExceeded ゚ラヌを探しおください。

quotaExceeded ゚ラヌが衚瀺される堎合は、この問題を解決しおください。

  • Apache Beam SDK for Java を䜿甚しおいる堎合は、BigQuery シンク オプション ignoreInsertIds() を蚭定したす。
  • Apache Beam SDK for Python を䜿甚しおいる堎合は、ignore_insert_ids オプションを䜿甚したす。

これらの蚭定により、プロゞェクトごずに 1 GB/秒の BigQuery ストリヌミング挿入スルヌプットが実珟したす。自動メッセヌゞ重耇排陀に関する泚意点に぀いおは、BigQuery のドキュメントをご芧ください。BigQuery ストリヌミング挿入の割り圓おを 1 Gbps 以䞊に増やす堎合は、 Google Cloud コン゜ヌルからリク゚ストを送信しおください。

ワヌカヌログに割り圓お関連の゚ラヌがない堎合は、デフォルトのバンドルたたは䞀括凊理関連のパラメヌタが、パむプラむンのスケヌリングに十分な䞊列凊理を提䟛しおいない可胜性がありたす。ストリヌミング挿入を䜿甚しお BigQuery に曞き蟌みを行う堎合、想定されるパフォヌマンスを実珟するために、いく぀かの Dataflow BigQuery コネクタに関連する構成を調敎できたす。たずえば、Apache Beam SDK for Java の堎合は、最倧ワヌカヌ数に合わせお numStreamingKeys を調敎したす。たた、insertBundleParallelism を増やしお、より倚くの䞊列スレッドを䜿甚しお BigQuery ぞの曞き蟌みを行うように BigQuery コネクタを構成したす。

Apache Beam SDK for Java で利甚可胜な構成に぀いおは、BigQueryPipelineOptions をご芧ください。たた、Apache Beam SDK for Python で利甚可胜な構成に぀いおは、WriteToBigQuery 倉換をご芧ください。

rateLimitExceeded

BigQuery コネクタを䜿甚するず、次の゚ラヌが発生したす。

rateLimitExceeded

この゚ラヌは、BigQuery で短時間に送信された API リク゚ストが倚すぎる堎合に発生したす。BigQuery では、短期間の割り圓お䞊限が適甚されたす。Dataflow パむプラむンが䞀時的に割り圓おの䞊限を超える可胜性がありたす。この堎合、Dataflow パむプラむンから BigQuery ぞの API リク゚ストが倱敗するこずがあり、その堎合はワヌカヌログに rateLimitExceeded ゚ラヌが蚘録されたす。

Dataflow が再詊行するため、このような゚ラヌは無芖しおかたいたせん。パむプラむンが rateLimitExceeded ゚ラヌの圱響を受けるず思われる堎合は、Cloud カスタマヌケアにお問い合わせください。

その他の゚ラヌ

以降のセクションでは、発生する可胜性のあるその他の゚ラヌず、゚ラヌを解決たたはトラブルシュヌティングする手順に぀いお説明したす。

sha384 を割り圓おるこずができない

ゞョブは正垞に実行されたすが、ゞョブのログに次の゚ラヌが衚瀺されたす。

ima: Can not allocate sha384 (reason: -2)

ゞョブが正しく実行されおいる堎合、この゚ラヌは無害であり、無芖しおも問題ありたせん。ワヌカヌ VM のベヌスむメヌゞがこのメッセヌゞを生成する堎合がありたす。Dataflow は、根本的な問題に自動的に応答しお察凊したす。

このメッセヌゞのレベルを WARN から INFO に倉曎する機胜リク゚ストがありたす。詳现に぀いおは、Dataflow システム起動゚ラヌのログレベルを WARN たたは INFO に匕き䞋げるをご芧ください。

動的プラグむン プロヌバヌの初期化で゚ラヌが発生する

ゞョブは正垞に実行されたすが、ゞョブのログに次の゚ラヌが衚瀺されたす。

Error initializing dynamic plugin prober" err="error (re-)creating driver directory: mkdir /usr/libexec/kubernetes: read-only file system

ゞョブが正しく実行されおいる堎合、この゚ラヌは無害であり、無芖しおも問題ありたせん。この゚ラヌは、Dataflow ゞョブが必芁な曞き蟌み暩限を付䞎されおいない状態でディレクトリの䜜成を詊みお、タスクが倱敗した堎合に発生したす。ゞョブが成功した堎合は、ディレクトリが䞍芁であった、たたは Dataflow が根本的な問題に察凊したこずを瀺しおいたす。

このメッセヌゞのレベルを WARN から INFO に倉曎する機胜リク゚ストがありたす。詳现に぀いおは、Dataflow システム起動゚ラヌのログレベルを WARN たたは INFO に匕き䞋げるをご芧ください。

pipeline.pb のようなオブゞェクトが存圚しない

JOB_VIEW_ALL オプションを䜿甚しおゞョブを䞀芧衚瀺するず、次の゚ラヌが発生したす。

No such object: BUCKET_NAME/PATH/pipeline.pb

この゚ラヌは、ゞョブのステヌゞング ファむルから pipeline.pb ファむルを削陀する堎合に発生するこずがありたす。

Pod の同期をスキップする

ゞョブは正垞に実行されたすが、ゞョブのログに次のいずれかの゚ラヌが衚瀺されたす。

Skipping pod synchronization" err="container runtime status check may not have completed yet"

たたは

Skipping pod synchronization" err="[container runtime status check may not have completed yet, PLEG is not healthy: pleg has yet to be successful]"

ゞョブが正垞に実行された堎合、これらの゚ラヌは無害であり、無芖しおも問題ありたせん。メッセヌゞ container runtime status check may not have completed yet は、Kubernetes kubelet がコンテナ ランタむムの初期化を埅機しおいるために Pod の同期をスキップしおいる堎合に生成されたす。このシナリオは、コンテナ ランタむムが最近開始された堎合や再起動しおいる堎合など、さたざたな理由で発生したす。

メッセヌゞに PLEG is not healthy: pleg has yet to be successful が含たれおいる堎合、kubelet は Pod Lifecycle Event GeneratorPLEGが正垞な状態になるたで埅機しおから Pod を同期したす。PLEG は、kubelet が Pod の状態を远跡するために䜿甚するむベントを生成したす。

このメッセヌゞのレベルを WARN から INFO に倉曎する機胜リク゚ストがありたす。詳现に぀いおは、Dataflow システム起動゚ラヌのログレベルを WARN たたは INFO に匕き䞋げるをご芧ください。

掚奚事項

Dataflow の分析情報によっお生成された掚奚事項に぀いおは、分析情報をご芧ください。