Todos os produtos
Search
Central de documentação

MaxCompute:Envio parcial para jobs do MaxFrame

Última atualização: Jun 26, 2026

O envio parcial do MaxFrame permite recuperar resultados de instâncias Fuxi bem-sucedidas mesmo quando um job falha, evitando desperdício de tempo e recursos computacionais.

Contexto

Em jobs do MaxCompute de grande escala, algumas instâncias Fuxi podem executar por longos períodos devido a tarefas de longa duração ou loops infinitos. Isso prolonga a execução do job ou até causa sua falha. Por padrão, o MaxCompute não retém dados de resultado de um job com falha, o que desperdiça tempo e recursos computacionais.

Para resolver isso, o MaxFrame oferece suporte ao envio parcial. Esse recurso tolera pequenas falhas ou perda de dados e permite recuperar resultados de instâncias Fuxi bem-sucedidas mesmo se o job falhar.

Recursos

  • Tipos de job compatíveis

    Somente jobs MaxFrame do MaxCompute são compatíveis.

  • Capacidades principais

    • Se um job MaxFrame falhar, o sistema retém os resultados das instâncias Fuxi bem-sucedidas.

    • Defina um timeout para encerrar proativamente jobs de longa duração e reter os resultados das instâncias Fuxi bem-sucedidas.

Nota

Atualmente, o recurso de envio parcial não se aplica a jobs cancelados manualmente.

Uso

Recuperar resultados parciais de um job com falha

Após ativar o envio parcial, recupere resultados de instâncias Fuxi bem-sucedidas mesmo se o job falhar.

Defina o seguinte parâmetro no nível do job para ativar o envio parcial.

options.sql.settings = {
    "odps.sql.always.commit.result": "true"  # Enable partial submission.
}
  • (Recomendado) Gravar resultados finais em uma tabela de destino

    O exemplo a seguir grava os resultados finais na tabela de destino data_output. Consulte essa tabela para recuperar os resultados parciais.

    df.mf.flatmap(
        ... # Your business logic here
    ).to_odps_table("data_output").execute()

    Também é possível visualizar as instâncias Fuxi bem-sucedidas no Logview do job.

    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:
        Successfully committed Fuxi instance count: 87
        Total Fuxi instance 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)
  • Consultar usando uma tabela temporária

    Caso o job não grave resultados em uma tabela de destino, localize o nome da tabela temporária gerada automaticamente no Logview e utilize-o para recuperar os resultados parciais.

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

    Para encontrar o nome da tabela temporária, acesse a aba Job Details no Logview e selecione a visualização Progress Chart. O nome da tabela temporária gerada automaticamente aparece no nó de saída do fluxograma, em um formato como j.default.tmp_mf_<timestamp>. Use esse nome de tabela para consultar os resultados parciais.

Definir um timeout para resultados parciais

Para jobs propensos a tarefas de longa duração ou loops infinitos, defina um timeout. Quando o timeout é atingido, o sistema encerra o job, mas retém os resultados das instâncias Fuxi bem-sucedidas. Recupere esses resultados parciais de uma tabela de destino ou de uma tabela temporária.

Ative o recurso de envio parcial e defina um timeout para o job:

options.sql.settings = {
    "odps.sql.always.commit.result": "true",  # Enable partial submission.
    "odps.sql.job.max.time.hours": "1"        # Set the timeout to 1 hour.
}
Nota

Se um job falhar antes do timeout, o sistema ainda retém os resultados das instâncias Fuxi bem-sucedidas.

Faturamento

Pagamento conforme o uso

Os jobs MaxFrame no modo pagamento conforme o uso são cobrados com base nas CU-horas realmente consumidas.

Baixe informações detalhadas de uso na página Usage Details. Para mais informações, consulte Analisar detalhes de faturamento e uso do MaxCompute.

Assinatura

Os jobs MaxFrame no modo assinatura consomem recursos do grupo de recursos por assinatura com base na quantidade solicitada. Nenhuma taxa adicional se aplica.