本文为您汇总运维中心的相关问题。

如何处理孤立节点?

  • 问题现象
    在运维大屏页面查看到存在孤立节点,或者对实例进行运行诊断时,发现上游存在孤立节点。孤立节点

    孤立节点是指在生产环境中,失去所有上游依赖的节点。孤立节点本身将无法生成实例,并且将导致其下游节点无法正常调度,影响数据产出。

  • 可能原因
    DataWorks任务根据您配置的依赖关系依次运行,造成孤立节点的根本原因是依赖丢失。以下图的节点依赖为例,为您介绍造成孤立节点更具体的原因。依赖关系
    • 依赖的输出名称被修改或删除。
    • 上游节点不存在。
    • 上游节点过期。
    • 上游节点未开启调度。
  • 排查处理方法
    1. 排查依赖的输出名称是否被修改或删除。
      • 场景描述

        示例图中节点B的父节点输出名称为工作空间名称.A,且两个节点已被发布至生产环境。您在节点A的调度配置面板,删除或修改工作空间名称.A为其它名称,并且重新发布节点A至生产环境。该操作会导致节点B依赖的输出名称工作空间名称.A失效,造成节点B变为孤立节点。

      • 排查思路

        在上游节点A的编辑页面右侧,单击调度配置。在调度依赖区域查看该输出名称是否被修改,并重新发布节点A至生产环境。

      • 解决方法

        修改节点B的父节点输出名称为工作空间名称.A,并重新发布至生产环境。

    2. 排查上游节点是否存在。
      • 场景描述

        您在发布节点时,仅发布了节点B,未发布上游节点A,导致节点B成为孤立节点。或者节点A和节点B均已发布至生产环境,您通过调用DataWorks OpenAPI,强制下线节点A,导致节点B成为孤立节点。

      • 排查思路

        任务发布页面,排查上游节点A是否未发布或已下线。

      • 解决方法

        发布上游节点A至生产环境,详情请参见发布任务

    3. 排查上游节点是否过期。
      • 排查思路
        在节点的编辑页面右侧,单击调度配置。在时间属性区域,排查上游节点的生效时间,确认是否过期。时间属性

        过期节点将不再生成实例,会导致下游节点也无法生成实例。

      • 解决方法

        修改该节点的生效时间在有效日期内。

    4. 排查上游节点是否开启调度。
      • 排查思路
        跨项目依赖的情况下,在节点的编辑页面右侧,单击调度配置。在时间属性区域,排查上游节点A所在的工作空间是否开启周期调度。开启调度

        如果未开启调度,则属于另一个工作空间的节点B成为孤立节点。

      • 解决方法

        开启上游节点所在工作空间的周期调度。

说明 孤立节点将导致下游节点无法正常运行。在紧急情况下,如果您确认对孤立节点的依赖不会影响当前节点的数据产出,您可以取消对孤立节点的依赖,让当前节点运行起来。

报错Communications link failure,该如何处理?

  • 读取报错
    • 问题现象
      读取数据时,报错如下。
      Communications link failure The last packet successfully received from the server was 7,200,100 milliseconds ago.
      The last packet sent successfully to the server was 7,200,100 milliseconds ago.
      - com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
    • 可能原因

      数据库执行SQL查询速度慢,导致MySQL读超时。

    • 解决方法
      • 排查是否设置了where过滤条件,以确保筛选字段已添加索引。
      • 排查源数据表的数据是否太多。如果数据太多,建议拆分为多个任务。
      • 查询日志找到执行阻塞的SQL,咨询数据库管理员解决。
  • 写入报错
    • 问题现象
      写入数据时,报错如下。
      Caused by: java.util.concurrent.ExecutionException: ERR-CODE: [TDDL-4614][ERR_EXECUTE_ON_MYSQL] Error occurs when execute on GROUP 'xxx' ATOM 'dockerxxxxx_xxxx_trace_shard_xxxx': Communications link failure The last packet successfully received from the server was 12,672 milliseconds ago.
      The last packet sent successfully to the server was 12,013 milliseconds ago. More...
    • 可能原因

      慢查询导致SocketTimeout。TDDL默认连接数据的SocketTimeout是12秒,如果一个SQL在MySQL端执行超过12秒仍未返回,会报4614的错误。当数据量较大或服务端繁忙时,会偶尔出现该错误。

    • 解决方法
      • 建议数据库稳定后,重新运行同步任务。
      • 联系数据库管理员调整该超时时间。

报错Semantic analysis exception - Invalid partition value,该如何处理?

  • 问题现象
    日志报错如下。
    FAILED: ODPS-0130071:[1,71] Semantic analysis exception - Invalid partition value: '20200715'?
  • 可能原因

    未配置任务的调度配置。

  • 排查思路
    单击节点编辑页面右侧的调度配置,确认是否已配置参数。调度配置

    如果已设置bizdate,仍然报上述问题,请修改参数为bizdate=${yyyymmdd}

报错no available machine resources under the task resource group,该如何处理?

  • 问题现象
    运维中心报错如下。
    no available machine resources under the task resource group
  • 解决方法

    运维中心页面的左侧导航栏,单击周期任务运维 > 周期任务。选中单击页面下方的

    1. 进入数据开发页面。
      1. 登录DataWorks控制台
      2. 在左侧导航栏,单击工作空间列表
      3. 选择工作空间所在地域后,单击相应工作空间后的进入数据开发
    2. 单击左上方的周期任务图标,选择全部产品 > 任务运维 > 运维中心(工作流)
    3. 在左侧导航栏,单击周期任务运维 > 周期任务
    4. 选中相应的任务,单击页面下方的更多 > 修改调度资源组
    5. 批量修改调度资源组对话框中,选择修改后的资源组,单击确定
    6. 对相应任务进行补数据重跑,详情请参见补数据实例

什么情况下会出现任务空跑?

  • 问题现象

    通常周调度或月调度会出现空跑现象。当设置每周或每月的某个时间点运行任务,除设置的时间点外运行,都会出现空跑现象。

    空跑现象有以下两种:
    • 实例状态:周实例和月实例空跑周期。
    • 任务状态显示成功(正常调度),运行日志为空,没有实际的跑数据。
  • 解决方法

    如果在其它的时间运行,只能修改调度时间后,重新提交或补数据。

    如果是日调度任务,请检查该节点的调度配置页面是否设置节点为空跑。

    如果生成实例方式T+1次日生成,业务时间为今天的数据,明天才会去运行。

    如果任务在每月1日调度运行,则补数据时,选择业务日期为上个月的最后一天。

    如果指定时间段内,无有效的任务实例,请检查节点的生效时间。

空跑任务特殊场景:运行时间为0s,且实例运行成功,实际实例为空跑调度。例如,小时任务一天一次性生成24个实例。从0点到23点,这些实例一次性生成。但发布时间是当天的14:40,则14:40之前的实例均属于空跑调度。从15点开始,实例才会正常调度运行。

天任务的原理和小时任务一致。例如,定时时间为00:10,但实际任务的发布时间为11点,则该节点当日的实例为空跑调度,因为00:10的定时时间已过。

如何恢复暂停的节点?

  • 问题描述

    需要恢复已暂停的节点,该如何操作?

  • 解决方法
    您可以通过以下两种方式恢复暂停的节点:
    • 运维中心页面,打开节点的DAG图,右键单击节点,选择恢复(解冻)
    • 数据开发页面,打开相应节点的调度配置页面。在时间属性中设置或取消暂停调度,并重新提交和发布节点。
      说明 请确认暂停的节点是否为周期任务。

已冻结的任务仍然调度运行,该如何处理?

  • 请确认冻结的任务是否为周期任务。
  • 周期任务的冻结操作对已经生成的实例无效,明天生成的实例将被冻结。

为什么任务一直在等待gateway?

  • 问题描述

    任务一直在等待云端的gateway资源。

  • 可能原因

    工作空间下的任务并发执行数已达上限。

  • 解决方法
    • 检查工作空间下,是否存在任务运行时间过长的任务。如果任务长时间未完成,资源未释放会影响其它任务的运行。
    • 如果有相关需求,请前往控制台购买独享资源组,以缓解资源紧张的情况。

如何设置优先级?

常见的优先级如下:
  • DataWorks上调度任务实例的优先级:数值越大,优先级越高。您可以理解为任务在工作空间中调度集群的优先级。
  • 基线的优先级:取值包括1、3、5、7和8,数值越大,优先级越高。
  • MaxCompute上SQL任务的优先级:取值为[1~9],数值越小,优先级越高。后续会转化为priority参数。您可以理解为任务在计算集群上的优先级,并可以在LogView中查看。
各优先级之间的联系:
  • 8级基线对应1级SQL任务,高优先级。
  • 通常基线的优先级高,意味着DataWorks任务的调度优先级和MaxCompute上SQL计算任务优先级都会高。
调整优先级的方式如下:
  • SQL任务优先级的调整方式:在执行的SQL最前面添加set odps.instance.priority=8;。该建议仅供参考。

    取值[1-9],数值越小优先级越高,后续会转化为Priority参数。

  • 调整周期任务优先级:您可以通过调整基线优先级的方式来调整周期任务优先级(默认值为1)。
  • 调整调度配置优先级:
    1. 进入运维中心页面。
    2. 在左侧导航栏,单击智能监控 > 基线管理
    3. 单击相应基线后的编辑
    4. 修改基线对话框中,设置优先级
    5. 单击完成

    基线优先级可以上推至MaxCompute计算任务优先级,也对应为instance的优先级。基线的等级越高,调度优先级越高,数值较高的基线将被优先调度。