问题排查

本页面介绍如何解决 Cloud Data Fusion 的问题。

流水线遇到问题

在 6.2 之前的 Cloud Data Fusion 版本中,有一个已知问题是流水线在 StartingRunning 状态下遇到问题。停止流水线会导致以下错误:Malformed reply from SOCKS server。此错误是由于 Dataproc 主节点上没有足够的内存资源导致。

建议

为了防止您的流水线在下次运行时卡住,请删除 Dataproc 集群。然后,更新 Compute Engine 配置文件中的主内存:

  • 必需:将 Dataproc 集群大小增加到至少 2 个 CPU 和主节点,至少达到 8 GB。
  • 可选:迁移到 Cloud Data Fusion 6.2。从版本 6.2 开始,流水线执行通过 Dataproc Job API 提交,并且不会在主节点上占用大量内存。但是,建议为生产作业使用 2 个 CPU 和 8 GB 主节点。

更改集群大小

REST API

如需更改集群大小,请导出 Compute Engine 配置文件,然后使用 REST API 更新内存设置:

  1. 导出 Compute Profile。本地保存至 JSON 文件。
  2. 修改 JSON 文件中的以下内存设置:将 masterCPUs 更新为至少 2,并将 masterMemoryMB 更新为至少 8192 MB(约为 8 GB)。

    {
     "name": "masterCPUs",
     "value": "2",
     "isEditable": true
    },
    {
     "name": "masterMemoryMB",
     "value": "8192",
     "isEditable": true
    },
    
  3. 使用 REST API 更新 Compute Profile。您可以在界面中使用 cURL 或 HTTP Executor。

    对于 cURL,请使用以下命令:

    curl -H "Authorization: Bearer $(gcloud auth print-access-token)" https://<data-fusion-instance-url>/api/v3/profiles/<profile-name> -X PUT -d @<path-to-json-file>

恢复流水线

要恢复卡住的流水线,请重启实例。您可以使用 REST API 或 gcloud 命令行工具重启实例。

REST API

如需重启实例,请使用 restart() 方法。

gcloud

如需重启实例,请运行以下命令:

gcloud beta data-fusion instances restart

并发流水线停滞

运行许多并发流水线时,可能会出现以下问题:流水线作业卡停滞于 StartingProvisioningRunning 状态。Cloud Data Fusion 界面运行缓慢或无响应。发生这种情况时,您可能无法在界面中或通过 API 调用停止流水线。

建议

  1. 重启实例。

    REST API

    如需重启实例,请使用 restart() 方法。

    gcloud

    如需重启实例,请运行以下命令:

    gcloud beta data-fusion instances restart

  2. 错开并发流水线运行。如果无法实现,或者问题仍然存在,请参阅获取支持

联接器插件不显示联接条件

当您使用可让您在基本和高级联接条件之间切换的 Joiner 插件时,Cloud Data Fusion 6.4.0 版中会出现以下问题。从先前版本升级或导入流水线后,当您打开“联接器属性”页面时,已配置流水线的基本联接条件不会显示出来。此问题不会影响流水线的运行方式,因为条件仍然存在。

建议

要解决此问题,请执行以下操作:

  1. 点击系统管理员 > 配置 > 进行 HTTP 调用
  2. 在 HTTP 调用执行程序字段中,输入:

    PUT namespaces/system/artifacts/core-plugins/versions/CORE_PLUGIN_VERSION/properties/widgets.Joiner-batchjoiner?scope=SYSTEM

    对于 CORE_PLUGIN_VERSION,使用最新的核心插件版本。

  3. 将以下 JSON 内容粘贴到 Body 字段中:

    0967c-fdb73
    2ee80-67055
    b41f9-1dcd9
    425a5-cf822
    7e1a0-485e6
    eda47-040ea
    27430-fabba
    803ec-2c6e7
    8f7e0-2738d
    e22b5-4c375
    b3abb-778e4
    2deda-2d6be
    47855-b451d
    3e356-1268e
    f0ff9-876b6
    623df-8703a
    

  4. 点击发送

如果您的“流水线”页面在另一个窗口中打开,您可能需要刷新页面才能看到联接条件。

SQL Server 的复制功能不复制已更改表的所有列

从 SQL Server 中的表复制数据时,复制作业会出现以下问题。如果复制源表包含新添加的列,则不会将该表自动添加到 CDC 表中。您必须手动将它添加到底层 CDC 表。

建议

要解决此问题,请执行以下操作:

  1. 停用 CDC 实例:

    EXEC sp_cdc_disable_table
    @source_schema = N'dbo',
    @source_name = N'myTable',
    @capture_instance = 'dbo_myTable'
    GO
    
  2. 再次启用 CDC 实例:

    EXEC sp_cdc_enable_table
    @source_schema = N'dbo',
    @source_name = N'myTable',
    @role_name = NULL,
    @capture_instance = 'dbo_myTable'
    GO
    
  3. 创建新的复制作业

如需了解详情,请参阅处理对源表的更改

复制功能和 SQL Server Always On 数据库

Microsoft SQL Server 来源可以捕获 Always On 只读副本中的更改。对于此设置,必须将运行时参数 source.connector.database.applicationIntent=ReadOnly 传递给复制作业。如果没有此运行时参数,则作业会失败,并显示以下错误:

Producer failure java.lang.RuntimeException: com.microsoft.sqlserver.jdbc.SQLServerException: Failed to update database "DATABASE_NAME" because the database is read-only.

建议

如需解决此错误,请将 source.connector.database.applicationIntent=ReadOnly 设置为运行时参数。这会在内部将 snapshot.isolation.mode 设为 snapshot

使用 BigQuery 接收器版本 0.17.0 时流水线失败或提供错误的结果

有一个已知问题,即包含 BigQuery 接收器插件 0.17.0 版的数据流水线失败或提供错误的结果。此问题已在 0.17.1 版中得到解决。

建议

如需解决此问题,请更新您的 Google Cloud 插件版本:

  1. 获取 Google Cloud 0.17.1 版或更高版本。
    1. 在 Cloud Data Fusion 网页界面中,点击 HUB
    2. 选择 Google Cloud 0.17.1 版或更高版本,然后点击部署
  2. 通过下列选项之一,将您的流水线使用的所有 Google Cloud 插件更改为同一版本:
    • 如需一次性更新所有插件版本,请导出现有流水线然后重新导入。导入流水线时,选择将所有插件替换为最新版本的选项。
    • 如需手动更新插件,请执行以下操作:
      1. 打开 Pipeline Studio 页面。
      2. 接收器菜单中,将指针悬停在 BigQuery 上方,然后点击更改
      3. 选择 0.17.1 版或更高版本。
      4. 对您使用的任何其他 Google Cloud 插件(例如 BigQuery 来源插件)重复执行此操作。

SQL Server 源插件支持日期时间数据类型

在以前的 SQL Server 源版本(1.5.3 版或更早版本)中:

  • SQL Server datetimedatetime2 数据类型会映射到 CDAP timestamp 数据类型。
  • datetimeoffset 数据类型映射到 CDAP string 数据类型。

虽然插件版本 1.5.4 向后不兼容,但升级到版本 1.5.4 后,如果流水线中的下游阶段依赖于来源的输出架构,则使用 1.5.3 版本的流水线可能无法正常运行(因为输出架构现已更改)。当 datetimedatetime2datetimeoffset 具有 null 值时,版本 1.5.4 会引发 NullPointerException

1.5.5 版及更高版本与 datetime 更兼容。在大多数情况下,可在 1.5.3 中运行的流水线在升级到 1.5.5 后仍可正常运行。使用来源插件中的现有输出架构设置。例如,如果您的输出架构已设置为将 datetimedatetime2 数据类型映射到 timestamp 数据类型,将 datetimeoffset 数据类型映射到 string 数据类型,则仍将采用这些设置。

特殊情况是,如果您对数据库名称、架构名称或表名称使用宏,并且尚未手动指定输出架构。因此,在运行时会检测并映射架构。旧版本 (1.5.3) 在运行时将 datetimedatetime2 映射到 timestamp 数据类型,并将 datetimeoffset 数据类型映射到 string 数据类型;而 1.5.5 及更高版本将在运行时将它们映射到 datetime

建议

要解决此问题,请升级您的流水线以使用插件 1.5.5 或更高版本。

升级后,SQL Server datetimedatetime2datetimeoffset 数据类型将在运行时映射到 CDAP 日期时间数据类型。如果您的下游阶段或接收器使用了原始时间戳(datetimedatetime2 的映射目标)或字符串(datetimeoffset 的映射目标),请更新它们或让它们使用 datetime 数据。如需了解详情,请参阅 CDAP SQL Server Batch Source