文件接收器流:如果您更改檢查點或輸出目錄,將出現恢複問題

了解在使用文件接收器進行流處理時,如果更改檢查點或輸出目錄,則如何解決恢複時發生的問題。

寫的亞當Pavlacka

最後發布日期:2022年5月17日

當您將數據流輸入文件接收器時,您應該始終同時更改檢查點和輸出目錄。否則,您可能會得到失敗或意外的輸出。

Apache Spark在輸出目錄中創建一個名為_spark_metadata.此文件夾包含每個批處理運行的預寫日誌。這就是Spark在寫入文件係統時獲得“恰好一次”保證的方式。這個文件夾包含每個批次的保存文件(命名為0,1,2,3等+ 19.compact, n.c olter等)。這些文件包括JSON,其中提供了關於特定批處理輸出的詳細信息。在此數據的幫助下,一旦批處理成功,任何重複的批處理輸出都將被丟棄。

如果你改變了檢查點目錄,但沒有改變輸出目錄:

當您更改檢查點目錄時,流作業將再次從0開始批量啟動。因為0已經存在於_spark_metadata文件夾,輸出文件將被丟棄,即使它有新的數據。也就是說,如果在第500批上停止前一次運行,那麼具有相同輸出目錄和不同檢查點目錄的下一次運行將隻在第501批上給出輸出。之前的所有批次將被靜默丟棄。

如果你改變輸出目錄而不是檢查點目錄:

目錄中的所有批處理數據都會丟失_spark_metadata文件夾中。但是Spark根據檢查點目錄從下一批開始寫入。例如,如果之前的運行在500處停止,那麼新流作業的第一次寫入將在文件501上_spark_metadata你會失去所有的舊批次。當你讀回文件時,你會得到錯誤未找到第0批(或第一個壓縮文件(19.compact))的元數據

文件接收流。

這篇文章有用嗎?