MaxFrame作业部分提交功能

更新时间:
复制为 MD 格式

本文为您介绍如何使用MaxFrame作业部分提交功能,以及计费说明。

背景信息

MaxCompute超大规模作业,可能存在作业部分Fuxi Instances因数据长尾、死循环等问题长期运行,导致作业整体执行时间拖长甚至超时失败。在默认情况下,MaxCompute对于失败的作业不会保留任何结果数据,造成时间、计算资源的浪费。

针对此场景,MaxFrame支持作业部分提交功能,对整体作业允许小范围的忽略和丢失,即使在作业失败的情况下也可获得已成功运行的Fuxi Instances结果数据。

功能特性

  • 支持的作业类型

    目前仅支持MaxCompute MaxFrame作业。

  • 核心能力

    • MaxFrame作业失败时,会保留已成功运行的Fuxi Instances结果数据。

    • 可通过设置超时时间主动终止长尾作业,保留已成功运行的Fuxi Instances结果数据。

说明

目前“部分提交”功能对于用户主动终止(Cancel)的作业暂不生效。

使用方式

失败作业获取部分结果

当您开启“部分提交”功能后,即使当前作业最终运行失败,您仍可通过以下方式获取已成功运行的Fuxi Instances结果数据。

您需在作业级别设置以下参数,以启用“部分提交”功能。

options.sql.settings = {
    "odps.sql.always.commit.result": "true"  # 开启部分提交功能
}
  • (推荐)将最终结果写入目标表

    如以下示例作业,最终结果数据写入目标表data_output,用户可查看目标表,获取部分运行成功的结果数据。

    df.mf.flatmap(
        ... # 客户业务逻辑
    ).to_odps_table("data_output").execute()

    同时可在作业Logview中查看已成功的Fuxi Instances。

    WARNING:[0,0]  [MF_UDF_20250507084433360GZQPJR9T002_USER_UDF_xxx($0, $1, $2, $3, $4, $5)]: more optimization opportunities are
        possible if [MF_UDF_20250507084433360GZQPJR9T002_USER_UDF_xxx($0, $1, $2, $3, $4, $5)] is annotated as deterministic.
    resource cost: cpu 23.25 Core * Min, memory 29.06 GB * Min
    inputs:
        llm_mf_bj.llm_mf_bj.test_input: 87 (442569 bytes)
    outputs:
        llm_mf_bj.default.tmp_mf_20250507084433360gzqpjr9t0o2_c0d07f4412d0c87742def840ffddb d5f_0: 870 (43620 bytes, 87 files)
    --------------------------------------------CommitFileStatusInfo--------------------------------------------
    PartialCommitSummary(Because odps.sql.always.commit.result=true, and the job(SQL_0_0_0_job_0) is FAILED, so we commit partial result):
        llm_mf_bj.default.tmp_mf_20250507084433360gzqpjr9t0o2_c0d07f4412d0c87742def840ffddb d5f_0:
        Successes Commit Result FuxiInstance Count: 87
        Total Commit Result FuxiInstance Count: 100
    --------------------------------------------JOB:SQL_0_0_0_job_0--------------------------------------------
    Job run time: 139.214
    Job run mode: fuxi job 2.0
    Job run engine: execution engine
    M1:
        instance count: 87
        rerun worker count: 1
        run time: 177.844
        instance time:
            min: 9.384, max: 25.759, avg: 16.035
        input records:
            TableScan1: 87  (min: 1, max: 1, avg: 1)
        input bytes:
            TableScan1: 442569  (min: 5087, max: 5087, avg: 5087)
        output records:
            TableSink1: 870  (min: 10, max: 10, avg: 10)
        output bytes:
            TableSink1: 43620  (min: 489, max: 512, avg: 501)
        output file count:
            TableSink1: 87  (size min: 489, max: 512, avg: 501)
        metrics_output_count:
            TableFunctionScan1: 870  (min: 0, max: 10, avg: 8)
  • 通过临时表查询

    若最终结果数据未写入目标表,可通过查询Logview获得MaxFrame自动生成的临时表名,以获取成功运行的结果数据。

    df.mf.flatmap(
        ...
    ).execute()

    查看Logview MaxFrame临时表名:在 Logview 的 Job Details 页签中,选择 Progress Chart 视图,流程图输出节点处即显示自动生成的临时表名(格式如 j.default.tmp_mf_<timestamp>),可用该表名查询已成功处理的部分结果数据。

设置作业超时获取部分结果

对于可能出现中长尾或死循环等情况的作业,您可主动设置作业超时时间,超时后将强制终止作业,但仍会保留已成功执行的Fuxi Instances的结果数据,您同样可在目标表或临时表中获取部分运行成功的结果数据。

开启“部分提交”功能,并设置作业超时时间:

options.sql.settings = {
    "odps.sql.always.commit.result": "true"  # 开启部分提交功能
    "odps.sql.job.max.time.hours": "1"  # 设置超时时间为 1 小时
}
说明

若作业在设置的超时时间内失败,仍会保留已成功执行的Fuxi Instance结果数据。

计量计费

按量付费

MaxFrame作业使用按量付费模式运行,将按照实际使用的CU时计费。

您可通过用量明细下载作业具体使用信息,详细的下载和分析方法请参见MaxCompute账单用量明细分析

包年包月

MaxFrame作业使用包年包月模式运行,在MaxFrame作业运行时将按照申请量占用包年包月的资源组资源,除此之外无单独费用。