本文為您介紹如何使用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作業運行時將按照申請量佔用訂用帳戶的資源群組資源,除此之外無單獨費用。