排解 Dataflow 網路問題

本頁說明如何解決 Dataflow 網路問題。

如要進一步瞭解如何為 Dataflow 作業設定網路,請參閱「設定網際網路存取權和防火牆規則」和「指定網路和子網路」。

無法建立 PoolableConnectionFactory

當 Dataflow 工作需要連線至外部資料庫時,會發生下列錯誤:

java.sql.SQLException: Cannot create PoolableConnectionFactory
(The connection attempt failed.)

如果 Dataflow 工作站無法與資料庫伺服器建立連線,通常是因為輸出規則或防火牆所致,就會發生這個問題。

如要找出這個問題的根本原因,請建立並執行連線測試。 連線能力測試可協助您找出流量遭到封鎖的位置。

如要更新輸出規則,請參閱防火牆輸出規則範例

使用 Cloud NAT 時連線逾時

當 Dataflow 工作嘗試透過 Cloud NAT 閘道連線至外部服務時,可能會發生下列錯誤:

java.net.ConnectTimeoutException: Connection timed out

如果您的網路已設為使用 Cloud NAT 處理輸出流量,但 Dataflow 工作也設為使用外部 IP 位址,就可能發生這個問題。如果 Dataflow 工作站有外部 IP 位址,會嘗試直接將流量轉送至網際網路,而不是透過 Cloud NAT 閘道,如果防火牆規則禁止直接存取,可能會導致連線逾時。

如要解決這個問題,請將 Dataflow 工作站設為不使用外部 IP 位址。這項設定可確保輸出流量會透過設定的 Cloud NAT 閘道轉送。詳情請參閱 Cloud NAT 說明文件

如要瞭解如何停用外部 IP 位址,請參閱「設定網際網路存取權和防火牆規則」。

這項資源不允許跨專案參照

在共用虛擬私有雲網路上執行 Dataflow 工作時,會發生下列錯誤:

Invalid value for field 'resource.properties.networkInterfaces[0].subnetwork':
'https://www.googleapis.com/compute/v1/projects/PROJECT/regions/REGION/subnetworks/SUBNETWORK'.
Cross-project references for this resource are not allowed.

如果您在共用虛擬私有雲網路中指定子網路,但服務專案未附加至共用虛擬私有雲主專案,就會發生這個問題。

如要解決這個問題,共用虛擬私有雲管理員必須將服務專案附加至主專案

執行個體必須與子網路位於相同區域

執行指定子網路的 Dataflow 工作時,會發生下列錯誤:

Failed to start the VM, launcher-ID, used for launching because of status code: INVALID_ARGUMENT, reason: Invalid Error:
Message: Invalid value for field 'resource.networkInterfaces[0].subnetwork': 'https://www.googleapis.com/compute/v1/projects/PROJECT/regions/REGION/subnetworks/SUBNETWORK'. Instance must be in the same region as the subnetwork.
HTTP Code: 400.

如果工作和工作中指定的子網路位於不同區域,就會發生這個問題。

如要解決這個問題,請在子網路所在的區域中執行作業。舉例來說,如果子網路位於 us-central1,請在 us-central1 地區執行工作。

IP 空間已用盡

建立 Dataflow 工作或觸發自動調整規模作業時,這些作業可能會失敗,並顯示下列訊息:

IP_SPACE_EXHAUSTED: Instance 'INSTANCE_NAME' creation failed: IP space of 'projects/PROJECT/regions/REGION/subnetworks/SUBNETWORK' is exhausted.

您可以嘗試下列任一策略來解決這項錯誤:

  1. 減少 Dataflow 作業的工作站要求數量。您可以設定 num_workers 管道選項來提供特定數量的工作站,也可以使用 max_num_workers 管道選項設定工作站數量上限。詳情請參閱「管道選項」。
  2. 盡可能增加 Dataflow 工作子網路的大小。如要瞭解如何擴充現有子網路,請參閱虛擬私有雲說明文件。
  3. 使用其他子網路,並確保有足夠的可用 IP 位址供 Dataflow 作業使用。
  4. 如有可能,請建立專屬子網路,並為 Dataflow 工作提供足夠的 IP 位址。

如果網路資源處於自訂子網路模式,網路介面就必須指定子網路

執行 Dataflow 工作時發生下列錯誤:

Workflow failed. Causes: Invalid Error: Message: Invalid value for field
'resource.properties.networkInterfaces[0].subnetwork': ''. Network interface
must specify a subnet if the network resource is in custom subnet mode. HTTP
Code: 400

如果名為 default 的 VPC 網路是從自動模式 VPC 網路轉換為自訂模式 VPC 網路,就會發生這個問題。

如要解決這個問題,請在使用自訂模式虛擬私有雲端網路時指定子網路參數。詳情請參閱指定網路和子網路

無法連上網路

如果停用外部 IP 位址,並嘗試執行 Dataflow 工作,就會發生下列錯誤:

NewConnectionError(''<pip._vendor.urllib3.connection.HTTPSConnection  object at ID>:
Failed to establish a new connection: [Errno 101] Network is unreachable

發生這個問題的原因是管道設定不允許連線至外部 IP 位址,但管道需要連線至外部 IP 才能執行。下列管道選項會停用外部 IP 連線:

Java

--usePublicIps=false

Python

--no_use_public_ips=true

Go

--no_use_public_ips=true

API

options = PipelineOptions(use_public_ips=False)

如要找出流量遭到封鎖的位置,請建立並執行連線測試

如要在不允許連線至外部 IP 位址的情況下解決這個問題,請進行下列一或多項變更。

如要進一步瞭解如何為 Dataflow 設定網際網路存取權,請參閱「Dataflow 的網際網路存取權」。

Dataflow 服務帳戶無法存取網路或子網路,或網路/子網路不存在

嘗試執行 Dataflow 工作時,發生下列其中一個錯誤。工作失敗。

Workflow failed. Causes: Network default is not accessible to Dataflow Service
account or does not exist
Workflow failed. Causes: Subnetwork SUBNETWORK is not
accessible to Dataflow Service account or does not exist

產生這個問題的可能原因如下:

  • 您在建立 Dataflow 工作時省略了子網路和網路參數,但專案中沒有名為 default 的自動模式虛擬私有雲網路。如果預設網路已刪除,或是機構政策限制禁止您建立預設網路,您可能就沒有預設網路。
  • 缺少子網路。
  • 子網路參數指定錯誤。
  • 缺少 Dataflow 服務帳戶的必要權限。
  • 如果您使用共用 VPC,主專案的值必須是 VPC 所在的專案。如要進一步瞭解共用虛擬私有雲,請參閱「共用虛擬私有雲總覽」。

如要解決這個問題,請按照指定網路和子網路的指南操作。

遠端程序呼叫 (RPC) 逾時或無法連線至通訊埠 12345 或 12346

執行未使用 Streaming Engine 或 Dataflow Shuffle 的 Dataflow 工作時,會發生下列其中一個錯誤。工作停滯或失敗。

串流工作:

Rpc to WORKER_HARNESS:12345 completed with error
UNAVAILABLE: failed to connect to all addresses; last error : UNKNOWN:
ipv4:WORKER_IP_ADDRESS:12345: Failed to connect to remote
host: FD Shutdown

批次工作:

(g)RPC timed out when SOURCE_WORKER_HARNESS talking to
DESTINATION_WORKER_HARNESS:12346.

如果缺少允許 TCP 通訊埠 1234512346 網路流量的防火牆規則,就會發生這個問題。如果工作使用多個工作站,工作站之間無法互相通訊。

如要解決這個問題,請參閱「DEADLINE_EXCEEDED 或伺服器沒有回應」一文中的疑難排解步驟。

單一工作站重複啟動及停止

啟動 Dataflow 工作時發生下列問題。在 Dataflow 工作的「Job metrics」(工作指標) 頁面中,「CPU utilization (All Workers)」(CPU 使用率 (所有工作站)) 圖表顯示工作站會重複啟動,但幾分鐘後就會停止。特定時間只能有一位工作人員。

CPU 使用率圖表顯示,系統會重複建立並停止一個工作站。

發生下列錯誤:

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

不會建立任何工作人員記錄。

工作記錄中可能會出現多則類似下列內容的訊息:

Autoscaling: Raised the number of workers to 1 based on the rate of progress in
the currently running stage(s).

如果虛擬私有雲網路沒有通往網際網路的預設路徑,也沒有通往子網路的預設路徑,就會發生這個問題。

如要解決這個問題,請在 VPC 網路中新增預設路徑。詳情請參閱 Dataflow 的網際網路存取權

如果使用者管理的 Worker 服務帳戶和 Dataflow 作業位於不同專案,也可能發生這個問題。如要進一步瞭解如何避免使用跨專案服務帳戶時發生這個問題,請參閱「指定使用者管理的 Worker 服務帳戶」一文中的步驟 3 和步驟 4。

如果虛擬私有雲網路有預設路徑,且使用者管理的工作站服務帳戶和 Dataflow 工作位於同一個專案中,請登入 Dataflow 工作的工作站 VM,並檢查 /var/log/dataflow 目錄中的記錄檔,找出問題。

子網路沒有私人 Google 存取權

如果啟動的 Dataflow 工作停用了外部 IP 位址,就會發生下列錯誤:

Workflow failed. Causes: Subnetwork SUBNETWORK on project
PROJECT_ID network NETWORK in
region REGION does not have Private Google Access, which
is required for usage of private IP addresses by the Dataflow workers.

如果關閉外部 IP 位址,但未啟用私人 Google 存取權,就會發生這個問題。

如要解決這個問題,請為 Dataflow 作業使用的子網路啟用私人 Google 存取權

無法使用指定的 IP 範圍建立 Dataflow

Dataflow 不支援為工作站 VM 指派靜態 IP 範圍。解決方法是建立具有特定 IP 位址範圍的子網路,並在該子網路中部署 Dataflow 工作。

如要進一步瞭解如何搭配使用子網路與 Dataflow,請參閱「指定網路和子網路」。

如要瞭解如何在子網路中設定 IP 範圍,請參閱「設定別名 IP 範圍」。

如要在子網路中執行管道,請參閱使用指定的子網路執行管道

您可能也需要建立 NAT 規則和路由器。詳情請參閱「Cloud NAT」一文。

後續步驟

如需其他網路疑難排解步驟,請參閱「排解 VM 之間的內部連線問題」。