本页面介绍如何解决 Cloud Data Fusion 批处理流水线的问题。
流水线错误:文本文件繁忙
运行批处理流水线时,会发生以下错误,导致流水线失败:
error=26, Text file busy
如需解决此问题,请设置一个触发器,以便在流水线失败时自动重试。
- 停止流水线。
- 创建触发器。在这种情况下,当您选择要执行的事件时,请选择失败 。如需了解详情,请参阅在下游流水线上创建入站触发器。
- 启动流水线。
并发流水线停滞
在 Cloud Data Fusion 中,运行许多并发批处理流水线可能会给实例带来压力,导致作业停滞在 Starting、Provisioning 或
Running 状态。因此,无法通过 Web 界面或 API 调用停止流水线。当您同时运行许多流水线时,Web
界面可能会变慢或无响应。此问题是由于向后端 HTTP 处理程序发出了多个界面请求而导致的。
如需解决此问题,请使用 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
如需解决此问题,您必须
向 Managed Service for Apache Spark 使用的服务帐号授予 Cloud Data Fusion Runner 角色 (roles/datafusion.runner)
。
使用 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 数据集
- 创建临时存储桶
- 创建 BigQuery 数据集
- 创建 BigQuery 表
为解决此问题,请将缺失的角色授予您在插件中指定的项目 (PROJECT_ID):
如需运行 BigQuery 作业,请授予 BigQuery Job User 角色 (
roles/bigquery.jobUser)。如需读取 BigQuery 数据集,请授予 BigQuery Data Viewer 角色 (
roles/bigquery.dataViewer)。如需创建临时存储桶,请授予 Storage Admin 角色 (
roles/storage.admin)。如需创建 BigQuery 数据集或表,请授予 BigQuery Data Editor 角色 (
roles/bigquery.dataEditor)。
如需了解详情,请参阅插件的问题排查文档 (Google BigQuery 多表接收器问题排查)。
流水线未在错误阈值处停止
即使您将错误阈值设置为 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 也可以自动删除集群。
Cloud Data Fusion 6.4 版及更高版本中提供了 Max Idle Time。
建议:对于 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 页面。
按创建日期对集群进行排序,从最旧到 最新。
如果信息面板处于隐藏状态,请点击显示信息面板 ,然后前往 Labels 标签页。
对于每个未使用的集群(例如,已超过一天),检查它是否具有 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 或更高版本。
Cloud Storage 插件在 Managed Service for Apache Spark 2.0 上使用正则表达式时会间歇性失败
当 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 将多个数据库表插件更新到 1.4.1 版或更高版本。更新后的版本不允许在引用名称 字段中使用空格。