本頁說明如何解決 Cloud Data Fusion 批次管道的問題。
管道錯誤:文字檔忙碌中
執行批次管道時發生下列錯誤,導致管道失敗:
error=26, Text file busy
如要解決這個問題,請設定觸發條件,在管道失敗時自動重試。
- 停止管道。
- 建立觸發條件。在這種情況下,選取要執行的事件時,請選擇「失敗」。詳情請參閱「在下游管道上建立傳入觸發條件」。
- 啟動管道。
並行管道卡住
在 Cloud Data Fusion 中,同時執行多個批次管道可能會對執行個體造成負擔,導致工作停滯在 Starting、Provisioning 或 Running 狀態。因此,您無法透過網頁介面或 API 呼叫停止管道。如果同時執行多個管道,網頁介面可能會變慢或沒有回應。這是因為後端的 HTTP 處理常式收到多個 UI 要求所致。
如要解決這個問題,請使用 Cloud Data Fusion 流量控制功能,控管新要求數量。
管道執行期間 SSH 連線逾時
執行批次管道時發生下列錯誤:
java.io.IOException: com.jcraft.jsch.JSchException:
java.net.ConnectException: Connection timed out (Connection timed out)
如要解決這個問題,請按照下列步驟操作:
- 檢查是否缺少防火牆規則 (通常是通訊埠 22)。如要建立新的防火牆規則,請參閱「Managed Service for Apache Spark 叢集網路設定」。
- 確認 Compute Engine 強制執行器允許 Cloud Data Fusion 執行個體與 Managed Service for Apache Spark 叢集之間的連線。
回應代碼:401。錯誤:不明錯誤
執行批次管道時發生下列錯誤:
java.io.IOException: Failed to send message for program run program_run:
Response code: 401. Error: unknown error
如要解決這個問題,請將 Cloud Data Fusion Runner 角色 (roles/datafusion.runner) 授予 Managed Service for Apache Spark 使用的服務帳戶。
使用 BigQuery 外掛程式的管道失敗,並顯示 Access Denied 錯誤
已知問題:執行 BigQuery 工作時,管道會因 Access Denied 錯誤而失敗。這會影響使用下列外掛程式的管道:
- BigQuery 來源
- BigQuery 接收器
- BigQuery 多資料表接收器
- 轉換下推
記錄中的錯誤範例 (可能因使用的外掛程式而異):
POST https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT_ID/jobs
{
"code" : 403,
"errors" : [ {
"domain" : "global",
"message" : "Access Denied: Project xxxx: User does not have bigquery.jobs.create permission in project PROJECT_ID",
"reason" : "accessDenied"
} ],
"message" : "Access Denied: Project PROJECT_ID: User does not have bigquery.jobs.create permission in project PROJECT_ID.",
"status" : "PERMISSION_DENIED"
}
在本範例中,PROJECT_ID 是您在外掛程式中指定的專案 ID。外掛程式中指定的專案服務帳戶沒有權限,無法執行下列至少一項操作:
- 執行 BigQuery 工作
- 讀取 BigQuery 資料集
- 建立臨時 bucket
- 建立 BigQuery 資料集
- 建立 BigQuery 資料表
如要解決這個問題,請將缺少的角色授予您在外掛程式中指定的專案 (PROJECT_ID):
如要執行 BigQuery 工作,請授予 BigQuery 工作使用者角色 (
roles/bigquery.jobUser)。如要讀取 BigQuery 資料集,請授予 BigQuery 資料檢視者角色 (
roles/bigquery.dataViewer)。如要建立臨時 bucket,請授予「Storage 管理員」角色 (
roles/storage.admin)。如要建立 BigQuery 資料集或資料表,請授予 BigQuery 資料編輯者角色 (
roles/bigquery.dataEditor)。
詳情請參閱外掛程式的疑難排解說明文件 (Google BigQuery Multi Table Sink Troubleshooting)。
管道未在錯誤門檻停止
即使您將錯誤門檻設為 1,管道也可能在發生多項錯誤後不會停止。
如果指令發生未處理的失敗事件,就會引發例外狀況,並觸發錯誤門檻。如果指令已使用 emitError API,系統就不會啟用錯誤門檻。
如要設計管道,在達到特定門檻時失敗,請使用 FAIL 指令。
只要傳遞至 FAIL 指令的條件符合,就會計入錯誤門檻,達到門檻後管道就會失敗。
刪除暫時性 Managed Service for Apache Spark 叢集
當 Cloud Data Fusion 在佈建管道時建立暫時的 Managed Service for Apache Spark 叢集,管道執行完畢後,系統就會刪除該叢集。在極少數情況下,叢集刪除作業會失敗。
強烈建議:升級至最新版 Cloud Data Fusion,確保叢集維護作業正常進行。
設定閒置時間上限
如要解決這個問題,請設定 Max Idle Time 選項。即使管道完成時的明確呼叫失敗,Managed Service for Apache Spark 也能自動刪除叢集。
Max Idle Time 適用於 Cloud Data Fusion 6.4 以上版本。
建議:如果是 6.6 之前的版本,請手動將 Max Idle Time 設為 30 分鐘以上。
手動刪除叢集
如果無法升級版本或設定 Max Idle Time 選項,請改為手動刪除過時的叢集:
取得叢集建立所在的每個專案 ID:
在管道的執行階段引數中,檢查 Managed Service for Apache Spark 專案 ID 是否已為執行作業自訂。

如未明確指定 Managed Service for Apache Spark 專案 ID,請判斷使用的佈建器,然後檢查專案 ID:
在管道執行階段引數中,檢查
system.profile.name值。
開啟佈建工具設定,檢查是否已設定 Managed Service for Apache Spark 專案 ID。如果沒有這項設定或欄位空白,系統會使用 Cloud Data Fusion 執行個體執行的專案。
針對每個專案:
在 Google Cloud 控制台中開啟專案,然後前往 Managed Service for Apache Spark 的「Clusters」(叢集) 頁面。
按照建立日期排序叢集,從最舊到最新。
如果資訊面板未顯示,請按一下 顯示資訊面板,然後前往 標籤分頁。
針對所有未使用的叢集 (例如已超過一天),請檢查是否具有 Cloud Data Fusion 版本標籤。這表示該叢集是由 Cloud Data Fusion 建立。
勾選叢集名稱旁的核取方塊,然後點按「刪除」。
在主要或次要工作站上,透過 Managed Service for Apache Spark 叢集執行管道時發生失敗
在 Cloud Data Fusion 6.8 和 6.9 版中,如果管道在 Managed Service for Apache Spark 叢集上執行,就會發生問題,導致管道失敗:
ERROR [provisioning-task-2:i.c.c.i.p.t.ProvisioningTask@161] - PROVISION task failed in REQUESTING_CREATE state for program run program_run:default.APP_NAME.UUID.workflow.DataPipelineWorkflow.RUN_ID due to
Caused by: io.grpc.StatusRuntimeException: CANCELLED: Failed to read message.
Caused by: com.google.protobuf.GeneratedMessageV3$Builder.parseUnknownField(Lcom/google/protobuf/CodedInputStream;Lcom/google/protobuf/ExtensionRegistryLite;I)Z.
如要解決這個問題,請升級至修補程式修訂版本 6.8.3.1、6.9.2.1 或更新版本。
在 Managed Service for Apache Spark 2.0 上,Cloud Storage 外掛程式會間歇性地因正規運算式而失敗
如果 Cloud Storage 外掛程式在路徑中使用 * 規則運算式模式,且執行環境為 Managed Service for Apache Spark 2.0,則管道可能會在 Cloud Data Fusion 6.10.1 版中發生間歇性失敗。
如要解決這個問題,請採取下列任一做法:
- 將 Managed Service for Apache Spark 映像檔更新至 2.1 以上版本。
- 還原為舊版 Cloud Storage 外掛程式。
- 增加為 Managed Service for Apache Spark 執行器分配的記憶體。
在 Managed Service for Apache Spark 2.2 上,管道會因 NoSuchMethodError 而失敗
在 Cloud Data Fusion 6.10.1.1 以上版本中,管道在 Managed Service for Apache Spark 2.2 上執行時,可能會失敗並顯示下列錯誤:
java.lang.NoSuchMethodError: 'org.apache.spark.sql.catalyst.encoders.ExpressionEncoder
org.apache.spark.sql.catalyst.encoders.RowEncoder.apply(org.apache.spark.sql.types.StructType)'
如要解決這個問題,請採取下列任一做法:
- 將 Managed Service for Apache Spark 映像檔重新設定為 2.1 版。詳情請參閱「在 Cloud Data Fusion 中變更 Managed Service for Apache Spark 映像檔版本」。
- 將 Cloud Data Fusion 執行個體升級至 6.11 版。
如果參照名稱含有空格,多個資料庫表格外掛程式就會失敗
在 Cloud Data Fusion 6.10.1 以上版本中,如果「參考名稱」欄位含有空格字元,使用多個資料庫表格批次來源的管道可能會失敗。
如要解決這個問題,請前往 Hub,將 Multiple database tables 外掛程式更新至 1.4.1 以上版本。新版不允許在「參考名稱」欄位中使用空格。