使用任務書籤追蹤處理的資料 - AWS Glue

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用任務書籤追蹤處理的資料

AWS Glue 會持續保留前次執行 ETL 任務的狀態資訊,以追蹤在該任務執行期間所處理的資料。此保存狀態資訊稱為任務書籤。任務書籤可協助 AWS Glue 維護狀態資訊,以及防止重新處理舊資料。透過任務書籤,您可以在依排定間隔重新執行時處理新資料。任務書籤包括各種任務元素的狀態,例如來源、轉換和目標。例如,ETL 任務可能會讀取 Amazon S3 檔案中的新分割區。AWS Glue 會追蹤已由任務成功處理的分割區,避免重複處理以及任務目標資料存放區中出現重複的資料。

任務書籤實作於 JDBC 資料來源、Relationalize 轉換和部分 Amazon Simple Storage Service (Amazon S3) 來源。下表列出 AWS Glue 針對任務書籤支援的 Amazon S3 來源格式。

AWS Glue 版本 Amazon S3 來源格式
0.9 版 JSON、CSV、Apache Avro、XML
1.0 版和更新版本 JSON、CSV、Apache Avro、XML、Parquet、ORC

如需 AWS Glue 版本的詳細資訊,請參閱定義 Spark 任務的任務屬性

任務書籤功能在透過 AWS Glue 指令碼存取時具有其他功能。瀏覽產生的指令碼時,您可能會看到與此功能相關的轉換內容。如需詳細資訊,請參閱 使用任務書籤

在 AWS Glue 中使用任務書籤

當任務開始之後,會將任務書籤選項當成參數傳遞。下表說明在 AWS Glue 主控台中設定任務書籤的選項。

任務書籤 描述
Enable 讓任務在執行之後更新狀態,以追蹤先前處理的資料。如果您任務的來源具有任務書籤支援,則會追蹤已處理的資料,而且在任務執行時,會處理最後一個檢查點之後的新資料。
停用 不會使用任務書籤,而且任務一律會處理整個資料集。您需負責管理之前任務執行的輸出。此為預設值。
暫停

處理上次成功執行後的遞增資料,或由下列子選項識別範圍內的資料,而不更新最後一個書籤的狀態。您需負責管理之前任務執行的輸出。這兩個子選項是:

  • job-bookmark-from <from-value> 是執行 ID,它表示所有被處理,直到最後一次成功執行之前,包括指定的執行 ID 的所有輸入。對應的輸入會被忽略。

  • job-bookmark-to <to-value> 是執行 ID,它表示所有被處理,直到最後一次成功執行之前,包括指定的執行 ID 的輸入。由 <from-value> 識別的輸入以外的對應的輸入由該任務處理。此輸入後的任何輸入也會排除而不進行處理。

指定此選項組時,不會更新任務書籤狀態。

子選項是可選的,但是當使用時,必須提供這兩個子選項。

有關在命令列傳遞至任務的參數 (特別是任務標籤) 的詳細資訊,請參閱 AWS Glue 任務參數

若是 Amazon S3 輸入來源,AWS Glue 任務書籤會檢查物件的上次修改時間,以確認需要重新處理哪些物件。如果自上次任務執行之後已修改您的輸入來源資料,則在您重新執行任務時重新處理檔案。

如為 JDBC 來源,則適用的規定如下:

  • AWS Glue 會針對每個資料表使用一個或多個欄做為書籤索引鍵,以決定新資料和已處理的資料。書籤索引鍵結合在一起,形成單一複合索引鍵。

  • 依預設,AWS Glue 會使用主索引鍵作為書籤索引鍵,但條件是其依序遞增或遞減 (沒有間隙)。

  • 您可以在 AWS Glue 指令碼中指定要作為書籤索引鍵使用的資料欄。如需有關在 AWS Glue 指令碼中使用任務書籤的詳細資訊,請參閱 使用任務書籤

  • AWS Glue 不支援使用名稱區分大小寫的資料欄作為任務書籤索引鍵。

您可以將 AWS Glue Spark ETL 任務的任務書籤倒轉至任何之前的任務執行。現在,您可以透過將任務書籤倒轉至任何之前的任務執行,更好地支援資料回填方案,從而在後續的任務執行中,僅重新處理已加入書籤的任務執行中的資料。

如果您想要使用相同的任務來重新處理所有資料,則請重設任務書籤。若要重設任務書籤狀態,請使用 AWS Glue 主控台、ResetJobBookmark 行動(Python:重置工作書籤) API 操作或 AWS CLI。例如,使用 AWS CLI 輸入下列命令:

aws glue reset-job-bookmark --job-name my-job-name

當您倒轉或重設書籤時,AWS Glue 不會清除目標檔案,因為可能有多個目標,且未使用任務書籤追蹤目標。只有來源檔案會使用任務書籤來追蹤。您可以在倒轉和重新處理來源檔案時建立不同的輸出目標,以避免輸出中的資料重複。

AWS Glue 會依任務來追蹤任務書籤。如果您刪除任務,任務書籤將不會保留。

在某些情況下,您可能已啟用 AWS Glue 任務書籤,但 ETL 任務正在重新處理已在稍早執行中處理的資料。如需解決此錯誤常見原因的資訊,請參閱疑難排解 Spark 中 AWS Glue 的錯誤

任務書籤功能的操作詳細資訊

本節說明如何使用任務書籤的更多操作詳細資訊。

任務書籤會存放任務的狀態。都會依任務名稱和版本號碼輸入狀態的每個執行個體。指令碼呼叫 job.init 時,會擷取其狀態,而且一律會取得最新版本。在狀態內,有多個狀態元素,即指令碼中每個來源、轉換和目的地執行個體所特有的。這些狀態元素是依連接到指令碼中對應元素 (來源、轉換或目的地) 的轉換內容所識別。從使用者指令碼呼叫 job.commit 時,會自動儲存狀態元素。指令碼會從引數取得任務名稱以及任務書籤的控制選項。

任務書籤中的狀態元素是來源、轉換或目的地特定的資料。例如,假設您想要從上游任務或程序持續寫入的 Amazon S3 位置讀取遞增資料。在此情況下,指令碼必須判斷到目前為止已處理哪些項目。Amazon S3 來源的任務書籤實作會儲存資訊,因此,在重新執行任務時,只能使用儲存的資訊來篩選新物件,以及重新計算下次執行任務的狀態。時間戳記用來篩選新的檔案。

除了狀態元素之外,任務書籤還會有執行次數嘗試次數版本號碼。執行次數會追蹤任務的執行,而嘗試次數會記錄任務執行的嘗試。任務執行次數是每次成功執行所遞增的依序增加數目。嘗試次數會追蹤每次執行的嘗試,而且只有在失敗嘗試之後執行時才會遞增。版本號碼會依序遞增,並追蹤任務書籤的更新。

在 AWS Glue 服務資料庫中,所有轉換的書籤狀態將作為鍵值對一起存放:

{ "job_name" : ..., "run_id": ..., "run_number": .., "attempt_number": ... "states": { "transformation_ctx1" : { bookmark_state1 }, "transformation_ctx2" : { bookmark_state2 } } }

最佳實務

下列是使用任務書籤的最佳實務。

  • 不要在已啟用書籤的情況下更改資料來源屬性。例如,有一個資料來源 0 指向 Amazon S3 輸入路徑 A,且該任務啟用了書籤並從已執行了好幾輪的來源進行讀取。如果您將資料來源 0 的輸入路徑更改為 Amazon S3 路徑 B,而不更改 transformation_ctx,則 AWS Glue 任務將使用儲存的舊書籤狀態。這將導致輸入路徑 B 中的檔案遺失或跳過,因為 AWS Glue 會假定這些檔案已在先前的執行中處理過。

  • 使用帶有書籤的目錄表,以便更好地管理分割區。書籤既適用於 Data Catalog 中的資料來源,也適用於來自選項的資料來源。但是,使用來自選項的方法會難以刪除/新增分割區。將目錄表與爬蟲程式結合使用可以提供更好的自動化來追蹤新增的分割區,並可讓您靈活地使用 pushdown 述詞選擇特定的分割區。

  • AWS Glue Amazon S3 檔案清單建立工具用於大型資料集。書籤將列出每個輸入分割區下的所有檔案並執行篩選,因此如果單個分割區下的檔案太多,書籤可能會遇到驅動程式 OOM 的問題。使用 AWS Glue Amazon S3 檔案清單建立工具,避免一次性列出記憶體中的所有檔案。