Share via


設定生產工作負載的自動載入器

Databricks 建議您遵循 在生產環境中執行自動載入器的串流最佳做法

Databricks 建議在差異實時數據表中使用自動載入器進行累加式數據擷取。 Delta Live Tables 擴充 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 的 串流查詢接聽程式介面

自動載入器會在每個批次將計量報告至串流查詢接聽程式。 您可以在串流查詢進度儀錶板的 [原始數據] 索引標籤底下,檢視待辦專案有多少個檔案,以及numBytesOutstanding待辦專案numFilesOutstanding的大小:

{
  "sources" : [
    {
      "description" : "CloudFilesSource[/path/to/source]",
      "metrics" : {
        "numFilesOutstanding" : "238",
        "numBytesOutstanding" : "163939124006"
      }
    }
  ]
}

在 Databricks Runtime 10.4 LTS 和更新版本使用檔案通知模式時,計量也會包含雲端佇列 approximateQueueSize 中關於 AWS 和 Azure 的大約檔案事件數目。

成本考量

執行自動載入器時,您的主要成本來源是計算資源和檔案探索的成本。

為了降低計算成本,Databricks 建議使用 Databricks 作業將自動載入器排程為批次作業 Trigger.AvailableNow ,而不是持續執行,只要您沒有低延遲需求。 請參閱 設定結構化串流觸發程式間隔

檔案探索成本可以採用目錄清單模式記憶體帳戶上的 LIST 作業形式,以及訂用帳戶服務上的 API 要求,以及檔案通知模式中的佇列服務。 為了降低檔案探索成本,Databricks 建議:

使用 Trigger.AvailableNow 和速率限制

注意

適用於 Databricks Runtime 10.4 LTS 和更新版本。

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

使用 Trigger.AvailableNow時,檔案探索會以異步方式進行數據處理,而且數據可以在具有速率限制的多個微批次之間處理。 根據預設,自動載入器會每個微批次最多處理 1000 個檔案。 您可以設定 cloudFiles.maxFilesPerTriggercloudFiles.maxBytesPerTrigger 來設定在微批次中應該處理多少個檔案或多少個字節。 檔案限制是硬性限制,但位元組限制是軟限制,這表示可以處理比提供的 maxBytesPerTrigger更多的位元組。 當兩個選項同時提供時,自動載入器會處理需要多少檔案才能達到其中一個限制。

事件保留期

自動載入器會使用 RocksDB 追蹤檢查點位置中探索到的檔案,以提供完全一次的擷取保證。 Databricks 強烈建議針對所有高容量或長時間擷取數據流使用 cloudFiles.maxFileAge 選項。 此選項會讓檢查點位置的事件過期,以加速自動載入器啟動時間。 啟動時間可能會成長為每次自動載入器執行的分鐘數,當您在儲存在來源目錄中的檔案最大存留期上限時,會增加不必要的成本。 您可以設定 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",則會停止串流,並將 設定"2 months"為 重新啟動數據流cloudFiles.maxFileAge,且檔案超過1個月,但最近2個月會重新處理。

如果您在第一次啟動數據流時設定此選項,則不會內嵌早於 cloudFiles.maxFileAge的數據,因此,如果您想要內嵌舊數據,就不應該在第一次啟動串流時設定此選項。 不過,您應該在後續執行時設定此選項。

使用 cloudFiles.backfillInterval 觸發一般回填

自動載入器可以觸發指定間隔的異步回填,例如每天回填一天一次,或一周回填一周。 檔案事件通知系統不保證上傳的所有檔案的 100% 傳遞,也不會在檔案事件的延遲時提供嚴格的 SLA。 Databricks 建議您使用 選項來觸發自動載入器 cloudFiles.backfillInterval 一般回填,以確保在數據完整性是必要條件時,在指定的 SLA 內探索到所有檔案。 觸發一般回填不會造成重複。