Griffin – 模型驅(qū)動的數(shù)據(jù)質(zhì)量服務平臺 - ebay的專欄 - 博客頻道 - CSDN.NET http://blog.csdn.net/ebay/article/details/52537285
作者:Lv, Alex
1概述
在eBay馒闷,當人們在處理[大數(shù)據(jù)](http://lib.csdn.net/base/hadoop)([Hadoop](http://lib.csdn.net/base/hadoop)或者其它streaming系統(tǒng))的時候,數(shù)據(jù)質(zhì)量的檢測是一個挑戰(zhàn)摄乒。不同的團隊開發(fā)了他們自己的工具在其專業(yè)領域檢測和分析數(shù)據(jù)質(zhì)量問題酬荞。于是我們希望能建立一個普遍適用的平臺嵌赠,提供共享基礎設施和通用的特性來解決常見的數(shù)據(jù)質(zhì)量問題板甘,以此得到可信度高的數(shù)據(jù)叫榕。
目前來說浑侥,當數(shù)據(jù)量達到一定程度并且有跨越多個平臺時(streaming數(shù)據(jù)和batch數(shù)據(jù)),數(shù)據(jù)數(shù)量驗證將是十分費時費力的晰绎。拿eBay的實時個性化平臺舉個例子寓落,每天我們都要處理大約600M的數(shù)據(jù),而在如此復雜的環(huán)境和龐大的規(guī)模中荞下,數(shù)據(jù)質(zhì)量問題則成了一個很大的挑戰(zhàn)伶选。
在eBay的數(shù)據(jù)處理中史飞,發(fā)現(xiàn)存在著如下問題:
當數(shù)據(jù)從不同的數(shù)據(jù)源流向不同的應用系統(tǒng)的時候,缺少端到端的統(tǒng)一視圖來追蹤數(shù)據(jù)沿襲(Data Lineage)仰税。這也就導致了在識別和解決數(shù)據(jù)質(zhì)量問題上要花費許多不必要的時間构资。
缺少一個實時的數(shù)據(jù)質(zhì)量檢測系統(tǒng)。我們需要這樣一個系統(tǒng):數(shù)據(jù)資產(chǎn)(Data Asset)注冊陨簇,數(shù)據(jù)質(zhì)量模型定義吐绵,數(shù)據(jù)質(zhì)量結果可視化、可監(jiān)控河绽,當檢測到問題時己单,可以及時發(fā)出警報。
缺乏一個共享平臺和API服務耙饰,讓每個項目組無需維護自己的軟硬件環(huán)境就能解決常見的數(shù)據(jù)質(zhì)量問題纹笼。 為了解決以上種種問題,我們決定開發(fā)Griffin這個平臺苟跪。Griffin是一個應用于分布式數(shù)據(jù)系統(tǒng)中的開源數(shù)據(jù)質(zhì)量解決方案廷痘,例如在Hadoop, [Spark](http://lib.csdn.net/base/spark), Storm等分布式系統(tǒng)中,Griffin提供了一整套統(tǒng)一的流程來定義和檢測數(shù)據(jù)集的質(zhì)量并及時報告問題削咆。此項目已經(jīng)發(fā)布到github上牍疏,并且也在持續(xù)改進中,歡迎fork并參與進來:[https://github.com/eBay/DQSolution](https://github.com/eBay/DQSolution)
主要特性:
l 精確度檢測:驗證結果集數(shù)據(jù)是否與源數(shù)據(jù)是一致的
l 數(shù)據(jù)剖析:利用數(shù)據(jù)集的一致性拨齐、獨特性和邏輯性鳞陨,來進行統(tǒng)計分析和數(shù)值評估。
l 異常監(jiān)測:利用預先設定的算法瞻惋,檢測出不符合預期的數(shù)據(jù)
l 可視化監(jiān)測:利用控制面板來展現(xiàn)數(shù)據(jù)質(zhì)量的狀態(tài)厦滤。
核心優(yōu)勢:
l 實時性:可以實時進行數(shù)據(jù)質(zhì)量檢測,能夠及時發(fā)現(xiàn)問題歼狼。
l 可擴展性:可以用于多個數(shù)據(jù)系統(tǒng)掏导。
l 可伸縮性:工作在大數(shù)據(jù)量的環(huán)境中,目前運行的數(shù)據(jù)量約1.2PB(eBay環(huán)境)羽峰。
l 自助服務:Griffin提供了一個簡潔易用的用戶界面趟咆,可以管理數(shù)據(jù)資產(chǎn)和數(shù)據(jù)質(zhì)量規(guī)則;同時用戶可以通過控制面板查看數(shù)據(jù)質(zhì)量結果和自定義顯示內(nèi)容梅屉。
2工作流程
Griffin已經(jīng)部署在eBay為核心數(shù)據(jù)系統(tǒng)提供服務值纱。這個解決方案系統(tǒng)性地提供一組通用的功能來解決數(shù)據(jù)質(zhì)量驗證方面的痛點。要檢測數(shù)據(jù)質(zhì)量問題坯汤,主要分為以下幾步:
用戶注冊數(shù)據(jù)資產(chǎn)
為數(shù)據(jù)資產(chǎn)建立一個數(shù)據(jù)質(zhì)量模型
模型引擎自動計算指標
通過郵件或是門戶網(wǎng)站報告數(shù)據(jù)質(zhì)量問題 這里是針對以上步驟的BPMN(業(yè)務流程建模標記法)圖表:
以下為每一個環(huán)節(jié)的具體內(nèi)容:
2.1注冊數(shù)據(jù)資產(chǎn)
用戶把想要檢測質(zhì)量的數(shù)據(jù)資產(chǎn)注冊進Griffin系統(tǒng)虐唠。數(shù)據(jù)資產(chǎn)的類型可以有很多,如離線的RDBMS(例如Teradata)惰聂,Hadoop系統(tǒng)或是Kafka疆偿、Storm等實時數(shù)據(jù)平臺咱筛。 通常情況下,注冊數(shù)據(jù)資產(chǎn)需要提供名稱杆故、類型迅箩、數(shù)據(jù)結構、所有者等基本信息处铛。
2.2建立模型
在注冊好數(shù)據(jù)資產(chǎn)之后沙热,用戶可以創(chuàng)建數(shù)據(jù)質(zhì)量模型來定義數(shù)據(jù)質(zhì)量檢測的規(guī)則。我們可以從不同的數(shù)據(jù)質(zhì)量維度來定義模型罢缸,比如:精確度篙贸、數(shù)據(jù)分析、異常檢測枫疆、有效性爵川、時效性等維度。
2.3執(zhí)行模型
通過模型或是規(guī)則的自動執(zhí)行息楔,僅幾秒便可得到流數(shù)據(jù)的樣本數(shù)據(jù)質(zhì)量驗證結果寝贡。在下一節(jié)“數(shù)據(jù)質(zhì)量模型設計”中,會詳細介紹模型引擎是如何設計以及執(zhí)行的值依。
2.4利用Spark計算
這些模型運算都將在Spark上發(fā)生圃泡,為實時數(shù)據(jù)或是離線數(shù)據(jù)計算數(shù)據(jù)質(zhì)量值。即便是大批量數(shù)據(jù)也可以很快地被計算出來愿险。
2.5生成度量值
在數(shù)據(jù)質(zhì)量值計算完成之后颇蜡,根據(jù)計算結果生成度量值,并存放于數(shù)據(jù)庫辆亏。
2.6郵件通知
如果度量值低于所設閾值风秤,郵件通知功能將會被觸發(fā),終端用戶會及時收到提醒扮叨。
2.7門戶網(wǎng)站和度量值顯示
所有的度量值最終都會在門戶網(wǎng)站上顯示出來缤弦,這樣用戶可以通過內(nèi)置的可視化工具來分析數(shù)據(jù)質(zhì)量結果,并采取相應的行動彻磁。
3系統(tǒng)架構
為了實現(xiàn)上述過程碍沐,我們?yōu)橄到y(tǒng)設計了三層結構:數(shù)據(jù)收集處理層(Data Collection&Processing Layer)缝左、后端服務層(Backend Service Layer)和用戶界面(User Interface)玻侥。請參考以下架構設計圖:
3.1數(shù)據(jù)收集處理層
在這一層取试,最關鍵的是模型引擎(Model Engine)薯定,Griffin是模型驅(qū)動的解決方案『馕矗基于目標數(shù)據(jù)集(targetdata-set)或者源數(shù)據(jù)集(作為高真的基準數(shù)據(jù)源 –“golden reference data”), 用戶可以選擇不同的數(shù)據(jù)質(zhì)量維度來執(zhí)行目標數(shù)據(jù)質(zhì)量驗證。我們有內(nèi)置的程序庫來支持以下檢測方式:我們支持兩種類型的數(shù)據(jù)源扯夭,batch數(shù)據(jù)和streaming數(shù)據(jù)鳍贾。對于batch數(shù)據(jù),我們可以通過數(shù)據(jù)連接器從Hadoop平臺收集數(shù)據(jù)交洗。對于streaming數(shù)據(jù)骑科,我們可以連接到諸如Kafka之類的消息系統(tǒng)來做近似實時數(shù)據(jù)分析。在拿到數(shù)據(jù)之后构拳,模型引擎將在我們的spark集群中計算數(shù)據(jù)質(zhì)量咆爽。
3.2后端服務層
在這一層上,有三個關鍵組件:
l 核心服務:用來管理元數(shù)據(jù)置森,例如模型定義斗埂、訂閱管理和用戶定制等等。****
l 作業(yè)調(diào)度:根據(jù)模型的定義創(chuàng)建并調(diào)度作業(yè)凫海,然后觸發(fā)模型引擎的運行并取得度量值結果呛凶,然后存儲度量值,并在檢測到數(shù)據(jù)質(zhì)量問題時發(fā)送電子郵件通知行贪。****
l REST服務:我們提供了內(nèi)置的REST服務來實現(xiàn)Griffin的各項功能漾稀,例如注冊數(shù)據(jù)資產(chǎn),創(chuàng)建數(shù)據(jù)質(zhì)量模型建瘫,度量發(fā)布崭捍,度量檢索,添加訂閱等等啰脚。因此殷蛇,開發(fā)人員可以基于這些web服務開發(fā)自己的用戶界面。****
3.3用戶界面
Griffin有一個內(nèi)置的可視化工具橄浓,它是基于AngularJS和eCharts開發(fā)的web前端應用晾咪,可以很好地展現(xiàn)數(shù)據(jù)質(zhì)量結果。以下是一些屏幕截圖:
4數(shù)據(jù)質(zhì)量模型設計
4.1精確度
對于一個給定的目標數(shù)據(jù)集(target dataset)贮配,它的數(shù)據(jù)質(zhì)量是否真正如所預期的那樣反映真實的數(shù)值谍倦?我們?nèi)绾悟炞C它的精確度?我們可以想辦法找到它可對比的高真的基準數(shù)據(jù)源(goldenreference dataset)或者叫真實數(shù)據(jù)源(source oftruth),它們可以是經(jīng)過一些邏輯處理后的上游數(shù)據(jù)而得來泪勒,或者也可以是直接來自符合用戶業(yè)務規(guī)則需求的數(shù)據(jù)集昼蛀,或者來自于第三方驗證的數(shù)據(jù)。
現(xiàn)在我們有了基準數(shù)據(jù)集和目標數(shù)據(jù)集圆存。那么叼旋,我們通過定義規(guī)則來比較兩者,就可以測量目標數(shù)據(jù)源的精確度了沦辙。 比如:數(shù)據(jù)源包含了100條記錄夫植,但是在目標數(shù)據(jù)集,只有95條記錄與數(shù)據(jù)源匹配,那么精確度值就是95/100*100% = 95.00%
方法
正如上文中所提及的详民,通過以下三步便可創(chuàng)建一個精確度模型延欠。
l 用戶可以定義一個高真的基準數(shù)據(jù)源(golden reference dataset)或者叫真實數(shù)據(jù)源(source of truth)
l 用戶可以在界面上選擇基準數(shù)據(jù)和目標數(shù)據(jù)的映射規(guī)則。
l 用戶提交后沈跨,后端將會調(diào)度作業(yè)來計算精確度結果由捎。
后端實現(xiàn)
假設基準數(shù)據(jù)源為S (source),目標數(shù)據(jù)集為T(target)饿凛,下面將要介紹如何測量精確度狞玛。
所謂測量目標數(shù)據(jù)集T的精確度,最通常的方法則是通過一項項比較源和目標數(shù)據(jù)集中的內(nèi)容計算出差值涧窒,測量所有字段是否相同心肪,公式如下:
鑒于兩個數(shù)據(jù)集都很大,因此我們利用MapReduce的編程模型進行分布式計算纠吴。
但事實上最大的挑戰(zhàn)在于提高這個匹配算法的通用性蒙畴,這不僅可以減輕數(shù)據(jù)分析師在編碼方面的負擔,同時對于不同的精確度需求也具有很高的靈活性呜象。
傳統(tǒng)上是利用基于SQL的方法來進行計算膳凝,就像[Hive](http://lib.csdn.net/base/hive)中的scripts一樣。但是這種方法沒有考慮源數(shù)據(jù)和目標數(shù)據(jù)集的獨特性恭陡,因此還具有提升的空間蹬音。
我們綜合考慮了源數(shù)據(jù)集和目標數(shù)據(jù)集的特殊性質(zhì)后,提出了一個通用的精確度模型休玩。
基于[Scala](http://lib.csdn.net/base/scala)的強大的表達能力著淆,我們的算法由scala實現(xiàn),并且可以在spark集群中運行拴疤。
4.2數(shù)據(jù)剖析
剖析類型
數(shù)據(jù)質(zhì)量問題可以通過不同的數(shù)據(jù)剖析類型展現(xiàn)出來永部。分析結果與期望值相比較,如果二者不相符的話則會發(fā)出警告呐矾。
在Griffin中共有三種剖析類型:
1. 簡單統(tǒng)計:用來統(tǒng)計表的特定列里面值為空苔埋、唯一或是重復的數(shù)量。
例如空值統(tǒng)計:反映了在所選列中值為空的數(shù)量蜒犯。這可以幫助用戶發(fā)現(xiàn)數(shù)據(jù)中的問題组橄,例如一個列中為空的值的比率過高,則說明數(shù)據(jù)可能有問題罚随。具體點說玉工,假設設置一個列存放電子郵件信息,但很多數(shù)據(jù)都丟失了淘菩,這樣利用空值統(tǒng)計可以發(fā)現(xiàn)數(shù)據(jù)中存在的問題遵班。
2. 匯總統(tǒng)計:用來統(tǒng)計最大值、最小值、平均數(shù)狭郑、中值等腹暖。
例如對于年齡值來說,通常情況下都是應該大于0小于150的愿阐,用戶可以通過統(tǒng)計年齡那一列中的最大值和最小值來分析數(shù)據(jù)是否正確。
3. 高級統(tǒng)計:用正則表達式來對數(shù)據(jù)的頻率和模式進行分析趾疚。
例如對于美國郵政編碼缨历,可以用此類正則表達式表示:\d{5}-\d{4}, \d{5}或者\d{9}。如果出現(xiàn)可以用其他格式的數(shù)據(jù)糙麦,則說明表中很可能存在著無效或者格式錯誤的數(shù)據(jù)辛孵。
后端實現(xiàn)
我們的數(shù)據(jù)分析機制主要是基于Spark的MLlib提供的列匯總統(tǒng)計功能,它對所有列的類型統(tǒng)計只計算一次赡磅。
主要優(yōu)勢:
我們的框架是基于Spark的魄缚,這也就使得對于大數(shù)據(jù)的分析速度很快。
在創(chuàng)建模型之后焚廊,數(shù)據(jù)分析是自動進行的冶匹。
歷史趨勢可視化。
4.3異常檢測
異常檢測的目標是從看似正常的數(shù)據(jù)中發(fā)現(xiàn)異常情況咆瘟,是一個檢測數(shù)據(jù)質(zhì)量問題的重要工具嚼隘。目前我們通過使用BollingerBands和MAD算法來實現(xiàn)異常檢測功能,可以發(fā)現(xiàn)數(shù)據(jù)集中那些遠遠不符合預期的數(shù)據(jù)袒餐。而預期值則是在對歷史趨勢的分析中得來的飞蛹。用戶會根據(jù)我們所檢測到的異常來調(diào)整算法中必要的參數(shù),而更改后的參數(shù)則會及時動態(tài)地顯示出來灸眼,這對于不同的用戶來說也更加具體卧檐。
后端實現(xiàn)
以MAD作為例子,一個數(shù)據(jù)集的MAD值反映的是每個數(shù)據(jù)點與均值之間的距離焰宣∶骨簦可以通過以下步驟來得到MAD值:
- 算出均值
- 算出每一個數(shù)據(jù)點與均值的差
- 對差值取絕對值
-
算出這些差值取絕對值之后的平均值
公式如下:
BollingerBand與MAD類似,更多細節(jié)可以參考[https://en.wikipedia.org/wiki/Bollinger_Bands](https://en.wikipedia.org/wiki/Bollinger_Bands)
5Griffin在eBay的使用
Griffin現(xiàn)在已經(jīng)部署在eBay的生產(chǎn)環(huán)境中匕积,為許多eBay系統(tǒng)提供核心數(shù)據(jù)質(zhì)量檢測服務(例如:實時的個性化數(shù)據(jù)平臺佛嬉,Hadoop 數(shù)據(jù)集, 網(wǎng)站運行速度監(jiān)測),每天驗證的記錄超過8億條闸天,數(shù)據(jù)量約1.2PB暖呕。
6展望未來
我們正在把Griffin引入到更多的eBay系統(tǒng),使它成為eBay內(nèi)部統(tǒng)一的數(shù)據(jù)質(zhì)量檢測平臺苞氮。
我們已經(jīng)開源這個項目湾揽,使更多公司、組織或個人受益,可以點擊[https://ebay.github.io/DQSolution/](https://ebay.github.io/DQSolution/)查看項目詳情库物,歡迎多多fork 霸旗。
我們今后將會不斷改進,支持更多類型和實時數(shù)據(jù)源的數(shù)據(jù)質(zhì)量維度戚揭,例如:有效性诱告、完整性、唯一性民晒、時效性和一致性等精居。
我們將會開發(fā)更多的[機器學習](http://lib.csdn.net/base/machinelearning)算法,可以用來自動檢測更加深層復雜的數(shù)據(jù)內(nèi)容之間的質(zhì)量關系潜必,以此來發(fā)現(xiàn)其中數(shù)據(jù)質(zhì)量的問題靴姿。
項目鏈接:https://ebay.github.io/DQSolution/
聯(lián)系方式:lzhixing@ebay.com