什麼是自動載入器目錄清單模式?
自動載入器預設會使用目錄清單模式。 在目錄清單模式中,自動載入器會列出輸入目錄來識別新的檔案。 目錄清單模式可讓您快速啟動自動載入器串流,而不需要存取雲端記憶體上數據以外的任何許可權設定。
如需目錄清單模式的最佳效能,請使用 Databricks Runtime 9.1 或更新版本。 本文說明目錄清單模式的預設功能,以及根據 檔案語彙順序的優化。
目錄清單模式如何運作?
Azure Databricks 已針對自動載入器優化目錄清單模式,可比其他 Apache Spark 選項更有效率地探索雲端記憶體中的檔案。
例如,如果您每 5 分鐘 /some/path/YYYY/MM/DD/HH/fileName
上傳一次檔案,以尋找這些目錄中的所有檔案,Apache Spark 檔案來源會以平行方式列出所有子目錄。 下列演算法會估計物件記憶體的 API LIST
目錄呼叫總數:
1 (基底目錄) + 365 (每天) * 24 (每小時) = 8761 通話
透過從記憶體接收扁平化回應,自動載入器可減少記憶體中檔案數目的 API 呼叫數目,除以每個 API 呼叫傳回的結果數目,大幅降低您的雲端成本。 下表顯示每個 API 呼叫針對通用物件記憶體所傳回的檔案數目:
每個呼叫傳回的結果 | 物件儲存體 |
---|---|
1000 | S3 |
5000 | ADLS Gen2 |
1024 | GCS |
累加式清單(已淘汰)
重要
這個功能已被取代。 Databricks 建議使用 檔案通知模式,而不是累加式清單。
注意
在 Databricks Runtime 9.1 LTS 和更新版本中可用。
增量清單適用於 Azure Data Lake Storage Gen2 (abfss://
)、S3 (s3://
) 和 GCS (gs://
)。
針對語彙產生的檔案,自動載入器會利用語匯檔案排序和優化清單 API,藉由列出最近擷取的檔案來提升目錄清單的效率,而不是列出整個目錄的內容。
根據預設,自動載入器會藉由檢查和比較先前完成目錄清單的檔案路徑,自動偵測指定的目錄是否適用於累加清單。 為了確保數據在模式中 auto
最終完成,自動載入器會在完成7個連續累加清單之後自動觸發完整目錄清單。 您可以藉由設定 cloudFiles.backfillInterval
來觸發指定間隔的異步回填,來控制完整目錄清單的頻率。
檔案的語彙順序
若要讓檔案依語彙排序,上傳的新檔案必須具有比現有檔案更大的前置詞。 語彙排序目錄的一些範例如下所示。
版本設定的檔案
Delta Lake 會以語匯順序認可數據表事務歷史記錄。
<path-to-table>/_delta_log/00000000000000000000.json
<path-to-table>/_delta_log/00000000000000000001.json <- guaranteed to be written after version 0
<path-to-table>/_delta_log/00000000000000000002.json <- guaranteed to be written after version 1
...
AWS DMS 會以版本設定的方式將 CDC 檔案上傳至 AWS S3。
database_schema_name/table_name/LOAD00000001.csv
database_schema_name/table_name/LOAD00000002.csv
...
日期分割的檔案
檔案可以以日期分割格式上傳。 以下提供一些這類範例:
// <base-path>/yyyy/MM/dd/HH:mm:ss-randomString
<base-path>/2021/12/01/10:11:23-b1662ecd-e05e-4bb7-a125-ad81f6e859b4.json
<base-path>/2021/12/01/10:11:23-b9794cf3-3f60-4b8d-ae11-8ea320fad9d1.json
...
// <base-path>/year=yyyy/month=MM/day=dd/hour=HH/minute=mm/randomString
<base-path>/year=2021/month=12/day=04/hour=08/minute=22/442463e5-f6fe-458a-8f69-a06aa970fc69.csv
<base-path>/year=2021/month=12/day=04/hour=08/minute=22/8f00988b-46be-4112-808d-6a35aead0d44.csv <- this may be uploaded before the file above as long as processing happens less frequently than a minute
使用日期分割上傳檔案時,請記住一些事項如下:
- 月、日、小時、分鐘必須以零填補,以確保語匯順序(應該上傳為
hour=03
,而不是hour=3
或2021/05/03
而不是2021/5/3
)。 - 只要處理頻率低於父目錄的時間粒度,檔案就不一定必須在最深層目錄中以語彙順序上傳。
某些可以在日期分割的語彙排序中上傳檔案的服務如下:
- Azure Data Factory 可以設定為以語匯順序上傳檔案。 請參閱這裡的範例。
- Kinesis Firehose
變更自動載入器的來源路徑
在 Databricks Runtime 11.3 LTS 和更新版本中,您可以變更以目錄清單模式設定的自動載入器目錄輸入路徑,而不需要選擇新的檢查點目錄。
警告
檔案通知模式不支援此功能。 如果使用檔案通知模式並變更路徑,您可能無法擷取在目錄更新時已存在於新目錄中的檔案。
例如,如果您想要執行每日擷取作業,以從依日組織之目錄結構載入所有數據,例如 /YYYYMMDD/
,您可以使用相同的檢查點,每天在不同的來源目錄追蹤擷取狀態資訊,同時維護從所有先前使用之來源目錄擷取之檔案的狀態資訊。