設定生產工作負載的自動載入器
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 建議:
- 在目錄清單模式中持續執行自動載入器時提供
ProcessingTime
觸發程式 - 根據語彙順序將檔案上傳至記憶體帳戶,以盡可能利用累加式清單(已淘汰)
- 無法利用累加式清單時的檔案通知
- 使用 資源標籤 自動載入器所建立的資源,以追蹤您的成本
使用 Trigger.AvailableNow 和速率限制
注意
可在 Databricks Runtime 10.4 LTS 和更新版本中使用。
自動載入器可以使用 排程在 Databricks 作業中以批次作業 Trigger.AvailableNow
的形式執行。 觸發AvailableNow
程式會指示自動載入器處理查詢開始時間之前抵達的所有檔案。 在數據流啟動之後上傳的新檔案會忽略,直到下一個觸發程序為止。
使用 Trigger.AvailableNow
時,檔案探索會以異步方式進行數據處理,而且數據可以在具有速率限制的多個微批次之間處理。 根據預設,自動載入器會每個微批次最多處理 1000 個檔案。 您可以設定 cloudFiles.maxFilesPerTrigger
和 cloudFiles.maxBytesPerTrigger
來設定在微批次中應該處理多少個檔案或多少個字節。 檔案限制是硬性限制,但位元組限制是軟限制,這表示可以處理比提供的 maxBytesPerTrigger
更多的位元組。 當兩個選項同時提供時,自動載入器會處理需要多少檔案才能達到其中一個限制。
檢查點位置
Databricks 建議將檢查點位置設定為沒有雲端物件生命周期原則的位置。 如果檢查點位置中的檔案會根據原則清除,數據流狀態就會損毀。 如果發生這種情況,您必須從頭開始重新啟動數據流。
事件保留期
自動載入器會使用 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 內探索到所有檔案。 觸發一般回填不會造成重複。