設定用於生產工作負載的自動加載工具
Databricks 建議您遵循 在生產環境中執行自動載入器的串流最佳做法 。
Databricks 建議在 DLT 中使用自動載入器進行累加式數據擷取。 DLT 擴展 Apache Spark 結構化串流中的功能,並可讓您只需撰寫幾行宣告式 Python 或 SQL,即可使用以下專案來部署生產級的數據管線:
監控自動載入器
查詢自動載入器探索到的檔案
注意
此 cloud_files_state
函式可在 Databricks Runtime 11.3 LTS 和更新版本中使用。
自動載入器會提供 SQL API 來檢查串流的狀態。 使用函式 cloud_files_state
,您可以找到自動載入器的資料流所發現檔案的元數據。 只要從 cloud_files_state
查詢 ,提供與自動載入器數據流相關聯的檢查點位置。
SELECT * FROM cloud_files_state('path/to/checkpoint');
收聽串流更新
若要進一步監視自動載入器串流,Databricks 建議使用 Apache Spark 的 串流查詢接聽程式介面。
自動載入器會在每個批次將計量報告至串流查詢接聽程式。 您可以在串流查詢進度儀錶板的 [原始數據] 標籤頁面下的 numFilesOutstanding
和 numBytesOutstanding
數據標準中,檢視待處理專案中有多少個檔案,及其待處理專案的大小。
{
"sources": [
{
"description": "CloudFilesSource[/path/to/source]",
"metrics": {
"numFilesOutstanding": "238",
"numBytesOutstanding": "163939124006"
}
}
]
}
在 Databricks Runtime 10.4 LTS 及更高版本中使用檔案通知模式時,度量也會包括 AWS 和 Azure 雲端佇列中的大約檔案事件數量,表示為 approximateQueueSize
。
成本考量
執行自動載入器時,您的主要成本來源是計算資源和檔案探索的成本。
為了降低計算成本,Databricks 建議使用 Databricks Jobs 將自動載入器排程為批次作業 Trigger.AvailableNow
,而不是持續執行,前提是您沒有低延遲需求。 請參閱《設定結構化串流觸發間隔》。
檔案探索的成本可能會以目錄清單模式下儲存帳戶上的 LIST 作業形式、訂用服務上的 API 請求形式,以及檔案通知模式下佇列服務的形式出現。 為了降低檔案探索成本,Databricks 建議:
- 在目錄清單模式中持續執行 Auto Loader 時提供
ProcessingTime
觸發器 - 根據詞彙順序將檔案上傳至儲存帳戶,以盡可能利用累加式清單(已淘汰)
- 無法利用累加式清單時的檔案通知
- 使用 資源標籤 為自動載入器創建的資源加上標籤,以追蹤您的成本
使用 Trigger.AvailableNow 和頻率限制
注意
可在 Databricks Runtime 10.4 LTS 和更新版本中使用。
自動載入器可以排程使用 Trigger.AvailableNow
在 Databricks 作業中以批次作業的形式執行。 觸發AvailableNow
程式會指示自動載入器處理查詢開始時間之前抵達的所有檔案。 在串流開始後上傳的新檔案會被忽略,直到下一個觸發事件。
使用 Trigger.AvailableNow
時,檔案探索是以異步方式進行的,並且數據可以在受速率限制的多個微批次中進行處理。 根據預設,自動載入器會每個微批次最多處理 1000 個檔案。 您可以設定 cloudFiles.maxFilesPerTrigger
和 cloudFiles.maxBytesPerTrigger
來設定在微批次中應該處理多少個檔案或多少個字節。 檔案限制是硬性限制,但位元組限制是軟限制,這表示可以處理比提供的 maxBytesPerTrigger
更多的位元組。 當兩個選項同時提供時,自動載入器會處理需要多少檔案才能達到其中一個限制。
檢查點位置
Databricks 建議將檢查點位置設定為沒有雲端物件生命周期原則的位置。 如果檢查點位置中的檔案會根據原則清除,數據流狀態就會損毀。 如果發生這種情況,您必須從頭開始重新啟動數據流。
事件保留期
自動載入器會使用 RocksDB 追蹤檢查點位置中探索到的檔案,以提供完全一次的擷取保證。 Databricks 強烈建議針對所有高容量或長時間擷取數據流使用 cloudFiles.maxFileAge
選項。 此選項會讓檢查點位置的事件過期,以加速自動載入器啟動時間。 啟動時間可能會隨著自動載入器 (Auto Loader) 的運行而增長至數分鐘,這會導致不必要的成本,尤其是在您對儲存在來源目錄中的檔案設有最大存留期上限時。 您可以設定 cloudFiles.maxFileAge
的最小值為 "14 days"
。 RocksDB 中的刪除會顯示為墓碑條目,因此您應該預期在事件過期之前,儲存使用量會暫時增加,然後才開始穩定下來。
警告
cloudFiles.maxFileAge
是以大量數據集的成本控制機制的形式提供。 過於激進地調整 cloudFiles.maxFileAge
可能會導致資料品質問題,例如重複擷取或遺漏檔案。 因此,Databricks 建議為 cloudFiles.maxFileAge
使用保守設定,例如 90 天,這與類似資料擷取解決方案建議的值相當。
嘗試微調 cloudFiles.maxFileAge
選項可能會導致自動載入器忽略未處理的檔案,或已處理過的檔案過期,然後重新處理導致重複數據。 以下是選擇cloudFiles.maxFileAge
時要考慮的一些事項:
- 如果您的資料流在經過很長一段時間後重新啟動,則會忽略從佇列中提取的早於
cloudFiles.maxFileAge
的檔案通知事件。 同樣地,如果您使用目錄清單,在停機期間出現並且比cloudFiles.maxFileAge
還要舊的檔案將被忽略。 - 如果您使用目錄清單模式並將
cloudFiles.maxFileAge
設定為"1 month"
,則會停止您的串流,然後使用cloudFiles.maxFileAge
將串流重新啟動為"2 months"
。接著,超過1個月但少於2個月的檔案會被重新處理。
如果您在第一次啟動數據流時設定此選項,則不會內嵌早於 cloudFiles.maxFileAge
的數據,因此,如果您想要內嵌舊數據,就不應該在第一次啟動串流時設定此選項。 不過,您應該在後續執行時設定此選項。
使用 "cloudFiles.backfillInterval" 觸發定期回填
自動載入器可以在指定的間隔觸發異步回填,例如每天回填一次,或每週回填一次。 檔案事件通知系統不保證上傳的所有檔案的 100% 傳遞,也不會在檔案事件的延遲時提供嚴格的 SLA。 Databricks 建議您使用cloudFiles.backfillInterval
選項來定期觸發 Auto Loader 回填,以確保在數據完整性為必要條件時,能在指定的 SLA 內找到所有檔案。 觸發規律的回填不會導致重複。