取消
顯示的結果
而不是尋找
你的意思是:

三角洲生活表增量批量加載和故障恢複

Valentin1
新的貢獻者三世

你好磚社區,

我工作在一個管道和想實現一個常見的用例使用三角洲生活表。管道應包括以下步驟:

  1. 增量加載數據從表作為一個批處理。
  2. 如果管道曾失敗,包括老批次由於沒有處理失敗。
  3. 對數據執行一些變換或處理。
  4. 將輸出寫入目標表。

這個實現的動機是處理新數據作為火花批,因為火花流不支持許多通常需要聚合。此外,這種方法的目的是處理管道故障可能出現的由於新部署或意想不到的變化數據。這些變化可能會打破或處理數據的轉換,導致停機時間。部署補丁後,管道應該恢複通過加載和處理失敗的批次沒有再計算曆史上的一切。這種恢複機製有助於避免巨大的成本在處理大量數據時。

我尋求指導的最佳實踐實現這個場景中使用的三角洲生活表。特別是,我怎麼能確保管道正確處理之前失敗的批次和流程以及新數據,同時也提供了強勁複蘇機製?

任何幫助或見解將不勝感激!

提前謝謝你!

5回複5

匿名
不適用

@Valentin Rosca:

三角洲生活表可用於實現以下方法:你描述的場景

  1. 增量加載數據從表作為一個批處理:您可以使用三角洲生活表”從三角洲讀取數據表的內置功能,包括支持增量加載。您可以指定批處理模式,同時讀取數據從表使用readStream方法在三角洲生活表,並配置批處理模式等設置的最大行數每批,每批最大持續時間,數據的方式排序。
  2. 處理以前失敗的批次:三角洲住表允許您指定的起始位置讀取數據從三角洲表使用startingVersion選項。您可以使用這個選項來指定版本或時間戳前麵失敗的批量讀取數據的起始位置。這將確保失敗的批處理是包含在數據被處理在當前運行的管道。
  3. 執行轉換或處理的數據:一旦你加載的數據表作為一個批處理,可以使用三角洲生活表“DataFrame API來執行所需的轉換或處理的數據。您可以應用火花操作,如過濾、聚合、連接,並根據需要自定義函數來轉換數據。
  4. 寫作輸出到目標表:處理數據之後,您可以使用生活表的功能編寫數據δ表輸出寫入目標表。您可以指定寫入數據的模式,如覆蓋、添加,或者忽略,這取決於你的管道的需求。
  5. 恢複機製:三角洲住表提供了內置的恢複機製來處理在數據處理失敗。如果在數據處理過程中出現錯誤,三角洲生活表自動重試失敗的批處理根據配置重試設置。您可以配置重試設置,如重試的最大數量和重試之間的延遲,以滿足您的需求。此外,三角洲生活表允許您監控管道的進展,查看每一批的狀態,並追蹤任何失敗或錯誤使用現場表UI或通過REST API的三角洲住表。

遵循這些最佳實踐,利用特征的三角洲生活表,您可以實現一個健壯的管道處理新數據批火花,從失敗中恢複,並提供可靠的數據處理你的用例。

Valentin1
新的貢獻者三世
  1. 增量加載數據從表作為一個批處理:您可以使用三角洲生活表”從三角洲讀取數據表的內置功能,包括支持增量加載。- >內置功能你在說什麼?從我的理解的文檔,您可以加載表增量的唯一方法就是通過使用readStream(你說這樣自己:readStream方法三角洲生活表),提供了一種流媒體DataFrame,不批。foreachbatch不能稱為δ生活表,唯一的方法是使用@apply_change_data和積累在另一個表,然後使用它。有另一種方式嗎?你能提供一個例子,如何加載增量數據批處理?你還提到配置批處理模式等設置的最大行數每批,每批最大持續時間,數據的方式排序,但這隻在流micro-batches配置設置,它不允許我們每一次處理流管道還是轉換微批量使用批處理引發操作。
  2. 處理以前失敗的批次:三角洲住表允許您指定的起始位置讀取數據從三角洲表使用startingVersion選項。<——這一點,你需要建立自己的核對基準點邏輯。這也意味著,您創建一個循環依賴作為管道的最後你寫最後一次成功運行的版本,然後在啟動時加載。您還必須涉及截斷操作如果使用@apply_change_data這樣我們就可以重置增量加載管道是否成功。這個邏輯非常繁瑣的實現(我目前測試這是一個解決方案,我想做什麼,但這似乎更像是一個比一個合適的解決方案。如果由於某種原因你想運行管道在不同版本的輸入表的開始/結束你將失去積累數據。可能會有解決方法,但我感覺,我隻是黑客在限製三角洲生活表)
  3. 是的。這個我們知道。問題是,如果在前麵的管道流DataFrame你收到,你在你聚合能做什麼是有限的,如果需要曆史計算通過內存限製(水印將大)或由於任何聚合流需要一個分區的時間,限製了你能做什麼。
  4. 你是非常有限的輸出模式可以用在三角洲住表不能直接調用編寫或writeStream。我們確實有很多那麼邏輯插入到我們的管道,我們隻關心行和聚合而改變。@apply_change_data不允許自定義合並(或者至少隻是檢測這一行沒有改變),你必須加入現有的數據,基本上自己重裝插入功能。這相當於你基本上重建車輪磚已經建立。
  5. 做檢查點在流回滾,如果一個任務已經失敗了?提到的恢複機製隻是一個重試機製,不是經濟複蘇的一個。恢複機製不僅要支持回滾,重試。從我的理解文檔,沒有回滾機製管道在失敗的情況下,但我可以是錯誤的。文檔中有一部分說anithing回滾檢查點和數據呢?

遵循這些最佳實踐,利用特征的三角洲生活表,您可以實現一個健壯的管道處理新數據批火花,從失敗中恢複,並提供可靠的數據處理你的用例。- >我們願意但似乎非常有限和最佳實踐,我們能做的尤其是說最佳實踐文檔缺乏適當的示例。

Vidula_Khanna
主持人
主持人

嗨@Valentin Rosca

希望一切都好!隻是想檢查如果你能解決你的問題,你會很高興分享解決方案或答案標記為最佳?其他的請讓我們知道如果你需要更多的幫助。

我們很想聽到你的聲音。

謝謝!

Valentin1
新的貢獻者三世

你好,沒有,我找到了一個解決這個(我現在嚐試的),沒有答案。更多的幫助總是受歡迎的。

歡迎來到磚社區:讓學習、網絡和一起慶祝

加入我們的快速增長的數據專業人員和專家的80 k +社區成員,準備發現,幫助和合作而做出有意義的聯係。

點擊在這裏注冊今天,加入!

參與令人興奮的技術討論,加入一個組與你的同事和滿足我們的成員。

Baidu
map