阿里數(shù)據(jù)研發(fā)崗位的工作大致可以概括為:了解需求→模型設計→ETL開發(fā)→測試→發(fā)布上線→日常運維→任務下線。與傳統(tǒng)的數(shù)據(jù)倉庫開發(fā)(ETL)相比,阿里數(shù)據(jù)研發(fā)有如下幾個特點:
- 業(yè)務變更頻繁——業(yè)務發(fā)展非?,業(yè)務需求多且變更頻繁;
- 需要快速交付——業(yè)務驅(qū)動,需要快速給出結(jié)果;
- 頻繁發(fā)布上線——迭代周期以天為單位,每天需要發(fā)布數(shù)次;
- 運維任務多——在集團公共層平均每個開發(fā)人員負責上百多個任務;
- 系統(tǒng)環(huán)境復雜——阿里平臺系統(tǒng)多為自研,且為了保證業(yè)務的發(fā)展,平臺系統(tǒng)的迭代速度較快,平臺的穩(wěn)定性壓力較大。
- 通過統(tǒng)一的計算平臺(MaxCompute)、統(tǒng)一的開發(fā)平臺、統(tǒng)一的數(shù)據(jù)模型規(guī)范和統(tǒng)一的數(shù)據(jù)研發(fā)規(guī)范,可以在一定程度上解決數(shù)據(jù)研發(fā)的痛點。
本文主要介紹MaxCompute和阿里巴巴內(nèi)部基于MaxCompute的大數(shù)據(jù)開發(fā)套件,并對在數(shù)據(jù)開發(fā)過程中經(jīng)常遇到的問題和相關(guān)解決方案進行介紹。
1、統(tǒng)一計算平臺
阿里離線數(shù)據(jù)倉庫的存儲和計算都是在阿里云大數(shù)據(jù)計算服務MaxCompute上完成的。
大數(shù)據(jù)計算服務MaxCompute是由阿里云自主研發(fā)的海量數(shù)據(jù)處理平臺,主要服務于海量數(shù)據(jù)的存儲和計算,提供完善的數(shù)據(jù)導入方案,以及多種經(jīng)典的分布式計算模型,提供海量數(shù)據(jù)倉庫的解決方案,能夠更快速地解決用戶的海量數(shù)據(jù)計算問題,有效降低企業(yè)成本,并保障數(shù)據(jù)安全。
MaxCompute采用抽象的作業(yè)處理框架,將不同場景的各種計算任務統(tǒng)一在同一個平臺之上,共享安全、存儲、數(shù)據(jù)管理和資源調(diào)度,為來自不同用戶需求的各種數(shù)據(jù)處理任務提供統(tǒng)一的編程接口和界面。它提供數(shù)據(jù)上傳/下載通道、SQL、MapReduce、機器學習算法、圖編程模型和流式計算模型多種計算分析服務,并且提供完善的安全解決方案。
1.MaxCompute的體系架構(gòu)
MaxCompute由四部分組成,分別是客戶端(MaxCompute Client)、接入層(MaxCompute Front End)、邏輯層(MaxCompute Server)及存儲與計算層(Apsara Core)。
圖:MaxCompute體系架構(gòu)圖
2.MaxCompute的特點
。1)計算性能高且更加普惠
2016年11月10日,Sort Benchmark在官方網(wǎng)站公布了2016年排序競賽CloudSort項目的最終成績。阿里云以$1.44/TB的成績獲得 Indy(專用目的排序)和Daytona(通用目的排序)兩個子項的世界冠軍,打破了AWS在2014年保持的紀錄$4.51/TB。這意味著阿里云將世界頂級的計算能力,變成普惠科技的云產(chǎn)品。CloudSort又被稱為“云計算效率之爭”,這項目賽比拼的是完成100TB數(shù)據(jù)排序誰的花費更少,也是Sort Benchmark的各項比賽當中最具現(xiàn)實意義的項目之一。
。2)集群規(guī)模大且穩(wěn)定性高
MaxCompute平臺共有幾萬臺機器、存儲近1000PB,支撐著阿里巴巴的很多業(yè)務系統(tǒng),包括數(shù)據(jù)倉庫、BI分析和決策支持、信用評估和無擔保貸款風險控制、廣告業(yè)務、每天幾十億流量的搜索和推薦相關(guān)性分析等,系統(tǒng)運行非常穩(wěn)定。同時,MaxCompute能保證數(shù)據(jù)的正確性,如對數(shù)據(jù)的準確性要求非常高的螞蟻金服小額貸款業(yè)務,就運行于MaxCompute平臺之上。
。3)功能組件非常強大
- MaxCompute SQL:標準SQL的語法,提供各類操作和函數(shù)來處理數(shù)據(jù)。
- MaxCompute MapReduce:提供Java MapReduce 編程模型,通過接口編寫MR程序處理MaxCompute中的數(shù)據(jù)。還提供基于MapReduce的擴展模型MR2,在該模型下,一個Map函數(shù)后可以接入連續(xù)多個Reduce函數(shù),執(zhí)行效率比普通的MapReduce模型高。
- MaxCompute Graph:面向迭代的圖計算處理框架,典型應用有PageRank、單源最短距離算法、K-均值聚類算法。
- Spark:使用Spark接口編程處理存儲在MaxCompute中的數(shù)據(jù)。
- RMaxCompute:使用R處理MaxCompute中的數(shù)據(jù)。
- Volume:MaxCompute以Volume的形式支持文件,管理非二維表數(shù)據(jù)。
(4)安全性高
MaxCompute提供功能強大的安全服務,為用戶的數(shù)據(jù)安全提供保護。MaxCompute采用多租戶數(shù)據(jù)安全體系,實現(xiàn)用戶認證、項目空間的用戶與授權(quán)管理、跨項目空間的資源分享,以及項目空間的數(shù)據(jù)保護。如支付寶數(shù)據(jù),符合銀行監(jiān)管的安全性要求,支持各種授權(quán)鑒權(quán)審查和“最小訪問權(quán)限”原則,確保數(shù)據(jù)安全。
2、統(tǒng)一開發(fā)平臺
阿里數(shù)據(jù)開發(fā)平臺集成了多個子系統(tǒng)來解決實際生產(chǎn)中的各種痛點。圍繞MaxCompute計算平臺,從任務開發(fā)、調(diào)試、測試、發(fā)布、監(jiān)控、報警到運維管理,形成了整套工具和產(chǎn)品,既提高了開發(fā)效率,又保證了數(shù)據(jù)質(zhì)量,并且在確保數(shù)據(jù)產(chǎn)出時效的同時,能對數(shù)據(jù)進行有效管理。
數(shù)據(jù)研發(fā)人員完成需求了解和模型設計之后,進入開發(fā)環(huán)節(jié),開發(fā)工作流如圖所示。
圖:開發(fā)工作流圖
對應于開發(fā)工作流的產(chǎn)品和工具如下圖所示,我們將對其功能進行簡要介紹。
1.在云端(D2)
D2是集成任務開發(fā)、調(diào)試及發(fā)布,生產(chǎn)任務調(diào)度及大數(shù)據(jù)運維,數(shù)據(jù)權(quán)限申請及管理等功能的一站式數(shù)據(jù)開發(fā)平臺,并能承擔數(shù)據(jù)分析工作臺的功能。
圖:對應于開發(fā)工作流的產(chǎn)品和工具
用戶使用D2進行數(shù)據(jù)開發(fā)的基本流程如下:
——用戶使用IDE進行計算節(jié)點的創(chuàng)建,可以是SQL/MR任務,也可以是Shell任務或者數(shù)據(jù)同步任務等,用戶需要編寫節(jié)點代碼、設置節(jié)點屬性和通過輸入輸出關(guān)聯(lián)節(jié)點間依賴。設置好這些后,可以通過試運行來測試計算邏輯是否正確、結(jié)果是否符合預期。
——用戶點擊提交,節(jié)點進入開發(fā)環(huán)境中,并成為某個工作流的其中一個節(jié)點。整個工作流可以被觸發(fā)調(diào)度,這種觸發(fā)可以是人為的(稱之為“臨時工作流”),也可以是系統(tǒng)自動的(稱之為“日常工作流”)。當某個節(jié)點滿足所有觸發(fā)條件后,會被下發(fā)到調(diào)度系統(tǒng)的執(zhí)行引擎Alisa中,完成資源分配和執(zhí)行的整個過程。
如果節(jié)點在開發(fā)環(huán)境中運行無誤,用戶可以點擊發(fā)布,將該節(jié)點正式提交到生產(chǎn)環(huán)境中,成為線上生產(chǎn)鏈路的一個環(huán)節(jié)。
2.SQLSCAN
SQLSCAN將在任務開發(fā)中遇到的各種問題,如用戶編寫的SQL質(zhì)量差、性能低、不遵守規(guī)范等,總結(jié)后形成規(guī)則,并通過系統(tǒng)及研發(fā)流程保障,事前解決故障隱患,避免事后處理。
SQLSCAN與D2進行結(jié)合,嵌入到開發(fā)流程中,用戶在提交代碼時會觸發(fā)SQLSCAN檢查。SQLSCAN工作流程如下圖所示。
圖:SQLSCAN工作流程圖
用戶在D2的IDE中編寫代碼。
- ——用戶提交代碼,D2將代碼、調(diào)度等信息傳到SQLSCAN。
- ——SQLSCAN根據(jù)所配置的規(guī)則執(zhí)行相應的規(guī)則校驗。
- ——SQLSCAN將檢查成功或者失敗的信息傳回D2。
- ——D2的IDE顯示OK(成功)、WARNNING(警告)、FAILED(失敗,禁止用戶提交)等消息。
SQLSCAN主要有如下三類規(guī)則校驗:
代碼規(guī)范類規(guī)則,如表命名規(guī)范、生命周期設置、表注釋等。
代碼質(zhì)量類規(guī)則,如調(diào)度參數(shù)使用檢查、分母為0提醒、NULL值參與計算影響結(jié)果提醒、插入字段順序錯誤等。
代碼性能類規(guī)則,如分區(qū)裁剪失效、掃描大表提醒、重復計算檢測等。
SQLSCAN規(guī)則有強規(guī)則和弱規(guī)則兩類。觸發(fā)強規(guī)則后,任務的提交會被阻斷,必須修復代碼后才能再次提交;而觸發(fā)弱規(guī)則,則只會顯示違反規(guī)則的提示,用戶可以繼續(xù)提交任務。
3.DQC
DQC(Data Quality Center,數(shù)據(jù)質(zhì)量中心)主要關(guān)注數(shù)據(jù)質(zhì)量,通過配置數(shù)據(jù)質(zhì)量校驗規(guī)則,自動在數(shù)據(jù)處理任務過程中進行數(shù)據(jù)質(zhì)量方面的監(jiān)控。
DQC主要有數(shù)據(jù)監(jiān)控和數(shù)據(jù)清洗兩大功能。數(shù)據(jù)監(jiān)控,顧名思義,能監(jiān)控數(shù)據(jù)質(zhì)量并報警,其本身不對數(shù)據(jù)產(chǎn)出進行處理,需要報警接收人判斷并決定如何處理;而數(shù)據(jù)清洗則是將不符合既定規(guī)則的數(shù)據(jù)清洗掉,以保證最終數(shù)據(jù)產(chǎn)出不含“臟數(shù)據(jù)”,數(shù)據(jù)清洗不會觸發(fā)報警。
DQC數(shù)據(jù)監(jiān)控規(guī)則有強規(guī)則和弱規(guī)則之分,強規(guī)則會阻斷任務的執(zhí)行(將任務置為失敗狀態(tài),其下游任務將不會被執(zhí)行);而弱規(guī)則只告警而不會阻斷任務的執(zhí)行。常見的DQC監(jiān)控規(guī)則有:主鍵監(jiān)控、表數(shù)據(jù)量及波動監(jiān)控、重要字段的非空監(jiān)控、重要枚舉字段的離散值監(jiān)控、指標值波動監(jiān)控、業(yè)務規(guī)則監(jiān)控等。
阿里數(shù)據(jù)倉庫的數(shù)據(jù)清洗采用非侵入式的清洗策略,在數(shù)據(jù)同步過程中不進行數(shù)據(jù)清洗,避免影響數(shù)據(jù)同步的效率,其過程在數(shù)據(jù)進入ODS層之后執(zhí)行。對于需要清洗的表,首先在DQC配置清洗規(guī)則;對于離線任務,每隔固定的時間間隔,數(shù)據(jù)入倉之后,啟動清洗任務,調(diào)用DQC配置的清洗規(guī)則,將符合清洗規(guī)則的數(shù)據(jù)清洗掉,并保存至DIRTY表歸檔。如果清洗掉的數(shù)據(jù)量大于預設的閾值,則阻斷任務的執(zhí)行;否則不會阻斷。
DQC工作流程如下圖所示。
圖:DQC工作流程圖
4.在彼岸
數(shù)據(jù)測試的典型測試方法是功能測試,主要驗證目標數(shù)據(jù)是否符合預期。其主要有如下場景:
。1)新增業(yè)務需求
新增產(chǎn)品經(jīng)理、運營、BI等的報表、應用或產(chǎn)品需求,需要開發(fā)新的ETL任務,此時應對上線前的ETL任務進行測試,確保目標數(shù)據(jù)符合業(yè)務預期,避免業(yè)務方根據(jù)錯誤數(shù)據(jù)做出決策。其主要對目標數(shù)據(jù)和源數(shù)據(jù)進行對比,包括數(shù)據(jù)量、主鍵、字段空值、字段枚舉值、復雜邏輯(如UDF、多路分支)等的測試。
。2)數(shù)據(jù)遷移、重構(gòu)和修改
由于數(shù)據(jù)倉庫系統(tǒng)遷移、源系統(tǒng)業(yè)務變化、業(yè)務需求變更或重構(gòu)等,需要對現(xiàn)有的代碼邏輯進行修改,為保證數(shù)據(jù)質(zhì)量需要對修改前后的數(shù)據(jù)進行對比,包括數(shù)據(jù)量差異、字段值差異對比等,保證邏輯變更正確。為了嚴格保證數(shù)據(jù)質(zhì)量,對于優(yōu)先級(優(yōu)先級的定義見“數(shù)據(jù)質(zhì)量”章節(jié))大于某個閾值的任務,強制要求必須使用在彼岸進行回歸測試,在彼岸回歸測試通過之后,才允許進入發(fā)布流程。
在彼岸則是用于解決上述測試問題而開發(fā)的大數(shù)據(jù)系統(tǒng)的自動化測試平臺,將通用的、重復性的操作沉淀在測試平臺中,避免被“人肉”,提高測試效率。
在彼岸主要包含如下組件,除滿足數(shù)據(jù)測試的數(shù)據(jù)對比組件之外,還有數(shù)據(jù)分布和數(shù)據(jù)脫敏組件。
- 數(shù)據(jù)對比:支持不同集群、異構(gòu)數(shù)據(jù)庫的表做數(shù)據(jù)對比。表級對比規(guī)則主要包括數(shù)據(jù)量和全文對比;字段級對比規(guī)則主要包括字段的統(tǒng)計值(如SUM、AVG、MAX、MIN等)、枚舉值、空值、去重數(shù)、長度值等。
- 數(shù)據(jù)分布:提取表和字段的一些特征值,并將這些特征值與預期值進行比對。表級數(shù)據(jù)特征提取主要包括數(shù)據(jù)量、主鍵等;字段級數(shù)據(jù)特征提取主要包括字段枚舉值分布、空值分布、統(tǒng)計值(如SUM、AVG、MAX、MIN等)、去重數(shù)、長度值等。
- 數(shù)據(jù)脫敏:將敏感數(shù)據(jù)模糊化。在數(shù)據(jù)安全的大前提下,實現(xiàn)線上數(shù)據(jù)脫敏,在保證數(shù)據(jù)安全的同時又保持數(shù)據(jù)形態(tài)的分布,以便業(yè)務聯(lián)調(diào)、數(shù)據(jù)調(diào)研和數(shù)據(jù)交換。
使用在彼岸進行回歸測試的流程如下圖所示。
圖:使用在彼岸進行回歸測試流程圖
注:本書中出現(xiàn)的部分專有名詞、專業(yè)術(shù)語、產(chǎn)品名稱、軟件項目名稱、工具名稱等,是淘寶(中國)軟件有限公司內(nèi)部項目的慣用詞語,如與第三方名稱雷同,實屬巧合。來源:阿里云云棲號