數據質量監控使用火花流媒體數據流和三角洲湖
2020年3月4日, 在工程的博客
試試這個筆記本複製下麵的步驟
在加速的時代,流數據不再是一個例外——相反,它正在成為常態。我們不再經常聽到客戶問,“我能流數據嗎?”,“我beplay体育app下载地址這個數據流的有多快?”等,無處不在的技術卡夫卡和三角洲湖強調這一勢頭。一端的流譜是我們所認為的“傳統”流工作負載,數據到達高速度,通常在半結構化或非結構化的格式如JSON,並且經常在小載荷。這種類型的工作負載跨越垂直;其中一個客戶的例子是一個主要的證券交易所和數據提供者負責每分鍾流成千上萬的事件——股票蜱蟲,新聞、引用和其他財務數據。這個客戶使用磚、三角洲和結構化流實時處理和分析這些流和高可用性。隨著規律增加,然而,我們看到客戶在另一個極端,用低頻流,“batch-style”處理。beplay体育app下载地址在此體係結構中,流媒體作為一種監控一個特定的目錄中,S3 bucket或其他著陸區,並自動處理數據就土地——這樣一個架構消除了傳統調度的負擔,尤其是在工作中失敗或部分處理。所有的這些都是說:流媒體不再僅僅是邊緣的實時或接近實時的數據計算。
流媒體的出現在主流是淨積極,有一些行李,還有這個架構。特別是,曆來有一個權衡:高質量的數據,或高速數據?在現實中,這不是一個有效的問題;質量必須耦合速度——所有的實用手段實現高速度,我們需要高質量的數據。畢竟,低質量高速度需要再加工,通常以批處理;低速度高質量,另一方麵,不能滿足許多現代的需求問題。隨著越來越多的公司采用流媒體作為處理架構的關鍵,速度和質量都必須得到改善。
在這篇文章中,我們將深入一個數據管理體係結構,可以用來打擊腐敗或錯誤數據流的主動監測和分析數據到達時不會造成瓶頸。
得到的早期預覽O ' reilly的新電子書一步一步的指導你需要開始使用三角洲湖。
架構設計流數據分析和監控過程
在磚,我們看到許多模式出現在我們的客戶,因為他們挑戰極限的可能,和速度/質量問題也不例外。beplay体育app下载地址來幫助解決這一悖論,我們開始思考正確的工具不僅提供所需的數據,速度還可以接受的數據質量水平。結構化流和三角洲湖是一個適合攝取和存儲層,因為他們一起創建一個可伸縮的、容錯和近實時係統,僅一次交付擔保。
找到一個可接受的工具企業數據質量分析更加困難。特別是,該工具將需要執行狀態的聚合數據質量標準的能力;否則,整個數據集進行檢查,如“具有非空值的百分比的記錄”,在計算成本會增加攝入數據量增加。這是行不通的流媒體係統,消除了許多工具。
我們選擇在我們最初的解決方案Deequ從亞馬遜,數據質量工具,因為它提供了一個簡單但功能強大的API,有狀態的聚合數據質量標準的能力,並支持Scala。在未來,其他Spark-native工具如預期即將到來的三角洲和管道,將提供替代方案。
實現流媒體數據的質量監控
我們模擬數據流由一個EC2實例上運行小卡夫卡生產商為模擬交易股票信息到一個話題,和使用本機磚連接器將該數據轉換為一個三角洲湖表。顯示數據質量檢查的功能火花流,我們選擇利用Deequ整個管道的不同特點:
- 基於曆史攝取數據生成約束的建議
- 運行一個增量到達數據質量分析使用foreachBatch
- 上運行(小)單元測試使用foreachBatch到達數據,檢疫不良批次不良紀錄表
- 最新的度量狀態寫入三角洲表每批到達
- 執行一個周期(大)單元測試對整個數據集和跟蹤MLFlow中的結果
- (即發送通知。通過電子郵件或鬆弛)根據驗證的結果
- 捕獲的指標在MLFlow可視化和日誌記錄
我們將MLFlow跟蹤數據的質量性能指標隨著時間的推移和版本的δ表,和鬆弛連接器通知和提醒。圖形,這個管道如下所示。
因為統一批/流接口的火花,我們能夠把報告、警報、和指標在任何時候在這個管道,實時更新或批快照。這是特別有用的設置觸發器或限製,所以,如果某種度量穿過一個閾值,可以執行數據質量改進行動。還值得注意的是,我們並不是影響初始登陸我們的原始數據;這個數據立即致力於δ表,這意味著我們不限製我們攝取率。下遊係統可以直接讀的這個表,並可能被打斷,如果任何上述觸發或質量閾值是交叉;或者,我們可以很容易地創建一個視圖,排除不良記錄提供一個幹淨的桌子。
在高級別上,執行數據質量跟蹤和驗證的代碼是這樣的:
spark.readStream.table (“trades_delta”).writeStream.foreachBatch {(batchDF: DataFrame batchId:長)= >/ /重新分配我們的當前狀態之前的下一個狀態val stateStoreCurr = stateStoreNext/ /運行分析當前批,總與保存的狀態val metricsResult = AnalysisRunner.run (data = batchDF…)/ /驗證當前microbatch的有效性val verificationResult = VerificationSuite ().onData (batchDF).addCheck (…) .run ()/ /如果驗證失敗,寫批處理不良記錄表格如果(verificationResult。地位! = CheckStatus.Success) {…}/ /當前結果寫入指標表Metric_results.write.format (“δ”).mode (“覆蓋”).saveAsTable (“deequ_metrics”)}.start ()
Deequ處理數據質量工具
使用Deequ相對自然磚內,首先定義一個分析器,然後運行dataframe分析儀。例如,我們可以通過Deequ提供本地跟蹤幾個相關的度量標準,包括檢查數量和價格非負,來自IP地址不是零,和不同的標誌字段在所有事務。流媒體設置的特殊用途Deequ StateProvider對象;這些允許用戶保存的狀態指標在內存或磁盤上,並聚合這些指標。這意味著每批處理是批隻分析記錄的數據,而不是整個表。這使性能相對穩定,甚至隨著數據量的增長,這是很重要的在長期生產用例需要一致地運行在任意大量數據。
MLFlow還很好跟蹤指標隨著時間的演化;在我們的筆記本,我們跟蹤的所有Deequ約束分析foreachBatch代碼作為指標,並使用versionID三角洲和時間戳作為參數。在磚筆記本中,集成MLFlow服務器尤其方便指標跟蹤。
通過使用結構化流、三角洲湖和Deequ,我們研製的藥物已經能夠減少傳統的質量和速度之間權衡,而著重於實現一個可接受的水平。特別重要的是靈活性,不僅在如何處理不良記錄(檢疫、錯誤、消息等),而且建築(何時何地我執行檢查?)和生態係統(我怎麼用我的數據?)。開源技術,如三角洲,結構化流,和Deequ這種靈活性的關鍵,隨著技術的發展,能夠減少功能,解決方案成為競爭優勢的一個司機。最重要的是,數據的速度和質量不能反對,但對齊,尤其是流移動接近核心業務操作。很快,這將不是一個選擇,而是一個期望和requirement-we這個世界一個microbatch邁進。