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.
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.
}
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.