有什麼新鮮事在Apache火花™3.1版本為結構化流
除了提供流媒體處理能力基於火花核心和SQL API,結構化流是最重要的組件之一,Apache引發™。在這篇文章中,我們總結了顯著改善火花流在最新的3.1版本中,包括一個新的流表API,支持stream-stream加入和多個UI的改進。此外,模式驗證和改進Apache卡夫卡數據源提供更好的可用性。最後,各種增強是提高文件流源/讀/寫性能下沉。
新的流表API
當開始一個結構化的流,連續數據流被認為是一個無界的表。因此,表api提供一個更加自然和方便的方式來處理流查詢。在火花3.1中,我們添加了支持DataStreamReader DataStreamWriter。最終用戶現在可以直接使用API讀寫流DataFrames表。看下麵的例子:
#創建流DataFramesrc=spark.readStream.format(“率”).option (“rowPerSecond”,10).load ()#流DataFrame寫來一個表src.writeStream。選項(“checkpointLocation checkpointLoc1) .toTable (“myTable”)#檢查的表結果spark.read.table (“myTable”)。顯示(截斷=30.)+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +|時間戳|價值|+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +|2021年-01年-19年07年:45:23.122|42||2021年-01年-19年07年:45:23.222|43||2021年-01年-19年07年:45:23.322|44|…
同樣,有了這些新的選項,用戶可以將源數據集和寫一個新表:
#寫來一個新表與轉換spark.readStream.table (“myTable”)。選擇(“價值”)\.writeStream。選項(“checkpointLocation checkpointLoc2) \.format(“鋪”).toTable (“newTable”)#檢查的表結果spark.read.table (“newTable”)。顯示()+- - - - - - +|價值|+- - - - - - +|1214年||1215年||1216年|…
磚推薦使用三角洲湖格式與流表api,它允許您
- 緊湊的小文件產生的低延遲同時攝取。
- 保持“隻有一次”的處理與不止一個流(或並發批處理作業)。
- 有效地發現哪些文件是新當使用作為一個流的源文件。
新的支持stream-stream加入
火花3.1之前,隻有內心,左外和右外連接在stream-stream加入支持。在最新的版本中,我們實現了完全外,半stream-stream加入,使結構化流有用的場景。
卡夫卡數據源的改進
在火花3.1我們已經升級了卡夫卡依賴2.6.0 (火星- 32568),它允許用戶遷移到卡夫卡補償的新API檢索(AdminClient.listOffsets)。它解決了問題(火星- 28367卡夫卡的連接器等無限使用舊版本時。
模式驗證
結構化流模式是必不可少的信息查詢。在火花3.1中,我們添加了模式對用戶輸入驗證邏輯模式和內部狀態存儲:
引入狀態模式驗證查詢重啟(中火星- 27237)
更新,鍵和值模式存儲在模式文件流的開始。然後驗證新的鍵和值模式對現有的兼容性在查詢重啟。狀態模式被認為是“兼容”當字段的數量是相同的,每個字段的數據類型都是相同的。請注意,我們不檢查這裏的字段名由於火花允許重命名。
這將防止與不兼容的狀態查詢模式運行,從而降低了在確定性行為的可能性,並提供更多的信息的錯誤消息。
介紹流狀態存儲模式驗證(火星- 31894)
以前,結構化流直接把檢查點(UnsafeRow代表)到StateStore沒有任何模式驗證。當升級到一個新的火花版本,檢查點文件將被重用。沒有任何改變或錯誤修複模式驗證,聚合函數可能會導致相關隨機異常,甚至錯誤的答案(如火星- 28067)。現在火花驗證對模式和拋出的檢查點InvalidUnsafeRowException檢查站時重用在遷移。值得一提的是,這項工作也幫助我們找到了攔截器,火星- 31990:流的狀態存儲兼容性是破碎的,火花3.0.1釋放。
結構化流UI改進
我們推出了新的結構化流媒體用戶界麵火花3.0。在火花3.1中,我們添加了曆史服務器支持結構化流UI (火星- 31953)以及流運行時狀態的更多信息:
在結構化流UI(狀態信息火星- 33223)
四個指標添加狀態信息:
- 聚合總狀態的行數
- 聚合狀態更新的行數
- 聚合狀態記憶中使用字節
- 聚合的行數下降了水印
與這些指標,我們有一個國家商店的全貌。它還可以添加一些新特性,比如容量規劃。
- 水印信息的差距在結構化流UI (火星- 33224)
水印的一個重要指標,最終用戶需要為有狀態的跟蹤查詢。它定義了“當“append模式的輸出將發出,因此知道多少差距掛鍾和水印(輸入數據)是非常有用的設定一個期望的輸出。
這顯示自定義指標信息,在配置中設置“spark.sql.streaming.ui.enabledCustomMetricList”。
增強FileStreamSource /下沉
有改進FileStreamSource /水槽:
緩存獲取文件列表之外maxFilesPerTrigger作為未讀文件(火星- 30866)
以前當配置maxFilesPerTrigger設置,FileStreamSource將獲取所有可用文件,處理有限數量的文件根據配置和每個micro-batch忽略他人。這種改進,它將緩存文件獲取前在下麵的批次和重用它們。
簡化邏輯文件流源和彙元數據日誌(火星- 30462)
這種變化之前,每當FileStreamSource /水槽需要的元數據,元數據日誌中的所有條目被反序列化到火花司機的記憶。隨著這一變化,火花將讀取和處理元數據日誌盡量精簡的方式。
提供了一個新選項保留在輸出文件(火星- 27188)
有一個新選項來配置元數據日誌文件的保留FileStreamSink,這有助於限製元數據日誌文件大小的增長對於長時間運行的結構化流查詢。
接下來是什麼
為下一個主要版本,我們將繼續關注新功能,性能和可用性改進火花結構化流。我們很樂意聽到您的反饋作為一個最終用戶或火花開發商!如果你有任何反饋,請隨時通過火花與我們分享它用戶或開發人員郵件列表。感謝所有作者和用戶社區的幫助這些發生顯著增強