Griffin – 模型驅(qū)動的數(shù)據(jù)質(zhì)量服務平臺

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)存在著如下問題:
  1.  當數(shù)據(jù)從不同的數(shù)據(jù)源流向不同的應用系統(tǒng)的時候,缺少端到端的統(tǒng)一視圖來追蹤數(shù)據(jù)沿襲(Data Lineage)仰税。這也就導致了在識別和解決數(shù)據(jù)質(zhì)量問題上要花費許多不必要的時間构资。
    
  2.  缺少一個實時的數(shù)據(jù)質(zhì)量檢測系統(tǒng)。我們需要這樣一個系統(tǒng):數(shù)據(jù)資產(chǎn)(Data Asset)注冊陨簇,數(shù)據(jù)質(zhì)量模型定義吐绵,數(shù)據(jù)質(zhì)量結果可視化、可監(jiān)控河绽,當檢測到問題時己单,可以及時發(fā)出警報。
    
  3.  缺乏一個共享平臺和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ì)量問題坯汤,主要分為以下幾步:

  1.  用戶注冊數(shù)據(jù)資產(chǎn)
    
  2.  為數(shù)據(jù)資產(chǎn)建立一個數(shù)據(jù)質(zhì)量模型
    
  3.  模型引擎自動計算指標
    
  4.  通過郵件或是門戶網(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)勢:

  1. 我們的框架是基于Spark的魄缚,這也就使得對于大數(shù)據(jù)的分析速度很快。
    
  2. 在創(chuàng)建模型之后焚廊,數(shù)據(jù)分析是自動進行的冶匹。
    
  3. 歷史趨勢可視化。
    

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值:

  1. 算出均值
  2. 算出每一個數(shù)據(jù)點與均值的差
  3. 對差值取絕對值
  4. 算出這些差值取絕對值之后的平均值
    公式如下:



    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展望未來

  1. 我們正在把Griffin引入到更多的eBay系統(tǒng),使它成為eBay內(nèi)部統(tǒng)一的數(shù)據(jù)質(zhì)量檢測平臺苞氮。
    
  2. 我們已經(jīng)開源這個項目湾揽,使更多公司、組織或個人受益,可以點擊[https://ebay.github.io/DQSolution/](https://ebay.github.io/DQSolution/)查看項目詳情库物,歡迎多多fork 霸旗。
    
  3. 我們今后將會不斷改進,支持更多類型和實時數(shù)據(jù)源的數(shù)據(jù)質(zhì)量維度戚揭,例如:有效性诱告、完整性、唯一性民晒、時效性和一致性等精居。
    
  4. 我們將會開發(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

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市磁滚,隨后出現(xiàn)的幾起案子佛吓,更是在濱河造成了極大的恐慌,老刑警劉巖垂攘,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件维雇,死亡現(xiàn)場離奇詭異,居然都是意外死亡晒他,警方通過查閱死者的電腦和手機谆沃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來仪芒,“玉大人唁影,你說我怎么就攤上這事〉嗝” “怎么了据沈?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長饺蔑。 經(jīng)常有香客問我锌介,道長,這世上最難降的妖魔是什么猾警? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任孔祸,我火速辦了婚禮,結果婚禮上发皿,老公的妹妹穿的比我還像新娘崔慧。我一直安慰自己,他們只是感情好穴墅,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布惶室。 她就那樣靜靜地躺著温自,像睡著了一般。 火紅的嫁衣襯著肌膚如雪皇钞。 梳的紋絲不亂的頭發(fā)上悼泌,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機與錄音夹界,去河邊找鬼馆里。 笑死,一個胖子當著我的面吹牛可柿,可吹牛的內(nèi)容都是我干的鸠踪。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼趾痘,長吁一口氣:“原來是場噩夢啊……” “哼慢哈!你這毒婦竟也來了蔓钟?” 一聲冷哼從身側(cè)響起永票,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎滥沫,沒想到半個月后侣集,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡兰绣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年世分,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缀辩。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡臭埋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出臀玄,到底是詐尸還是另有隱情瓢阴,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布健无,位于F島的核電站荣恐,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏累贤。R本人自食惡果不足惜叠穆,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望臼膏。 院中可真熱鬧硼被,春花似錦、人聲如沸渗磅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至论巍,卻和暖如春烛谊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背嘉汰。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工丹禀, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鞋怀。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓双泪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親密似。 傳聞我的和親對象是個殘疾皇子焙矛,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容