共用方式為


設定用於生產工作負載的自動加載工具

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 的 串流查詢接聽程式介面

自動載入器會在每個批次將計量報告至串流查詢接聽程式。 您可以在串流查詢進度儀錶板的 [原始數據] 標籤頁面下的 numFilesOutstandingnumBytesOutstanding 數據標準中,檢視待處理專案中有多少個檔案,及其待處理專案的大小。

{
  "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 建議:

使用 Trigger.AvailableNow 和頻率限制

注意

可在 Databricks Runtime 10.4 LTS 和更新版本中使用。

自動載入器可以排程使用 Trigger.AvailableNow 在 Databricks 作業中以批次作業的形式執行。 觸發AvailableNow程式會指示自動載入器處理查詢開始時間之前抵達的所有檔案。 在串流開始後上傳的新檔案會被忽略,直到下一個觸發事件。

使用 Trigger.AvailableNow 時,檔案探索是以異步方式進行的,並且數據可以在受速率限制的多個微批次中進行處理。 根據預設,自動載入器會每個微批次最多處理 1000 個檔案。 您可以設定 cloudFiles.maxFilesPerTriggercloudFiles.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 內找到所有檔案。 觸發規律的回填不會導致重複。