《海量數(shù)據(jù)的高效存儲_---_淘寶云梯極限存儲的原理和實踐》由會員分享,可在線閱讀,更多相關(guān)《海量數(shù)據(jù)的高效存儲_---_淘寶云梯極限存儲的原理和實踐(31頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、單擊此處編輯母版標(biāo)題樣式,單擊此處編輯母版文本樣式,第二級,第三級,第四級,第五級,*,1,極限存儲設(shè)計原理及實踐,淘,寶,-,數(shù)據(jù)平臺與產(chǎn)品部 圖海,2024年12月10日,2,場景,方案,效果,優(yōu)化,云梯,1,前端,RDBMS,其他集群,點擊流日志,LogServer,everyday,everytime,云梯的存儲職責(zé),DataX,TimeTunnel,DBSync,怎么辦,?,怎么辦,?,怎么辦,?,刪除歷史數(shù)據(jù),立竿見影,省力又省事,怎么辦,?,20080101,20080102,20080103,20110720,商品表,500G,502G,505G,G,1000G,“,21,世紀(jì)
2、核心的競爭是數(shù)據(jù)的競爭,”,“誰擁有更多數(shù)據(jù),誰就擁有未來”,前端交易系統(tǒng)、商品中心、用戶中心等出于效率的考慮,不會長期保存大量歷史數(shù)據(jù),而數(shù)據(jù),平臺,作為企業(yè)數(shù)據(jù)分析及挖掘的基礎(chǔ)設(shè)施,天生具有保存歷史數(shù)據(jù)的職責(zé),非但如此,如何快速、高效的獲取歷史上任意一天的快照數(shù)據(jù)也成為設(shè)計歷史數(shù)據(jù)存放方式時的重要考量。,數(shù)據(jù)分類,商品表,:,商品,ID,商品名,商品狀態(tài),創(chuàng)建時間,所屬類目,交易表,:,訂單,ID,支付,ID,物流,ID,支付時間,訂單狀態(tài),典型操作,:,新增商品,/,訂單,(new),商品,/,訂單狀態(tài)變更,(update),商品下線,/,訂單撤銷,(delete),典型,的數(shù)據(jù)庫增刪改
3、操作,數(shù)據(jù)特點,:,有業(yè)務(wù)主鍵,確保記錄唯一性,全量快照數(shù)據(jù)量巨大,(1TB),,數(shù)據(jù)分析需要全量快照數(shù)據(jù),每日變更量占比很少,(,遠(yuǎn)低于,5%),數(shù)據(jù)記錄冗余度非常高,注,:,變更指發(fā)生增刪改的記錄,當(dāng)時存量數(shù)據(jù)中,7,0%,屬于此類特征的業(yè)務(wù)數(shù)據(jù),且記錄冗余度高,數(shù)據(jù)分類,評價增量表,:,評價,ID,用戶星級,用戶昵稱,評價記錄,商品名稱,點擊流日志,:,記錄時間,IP,地址,引用鏈接,機(jī)器,ID,用戶,ID,數(shù)據(jù)特點,:,沒有業(yè)務(wù)主鍵,屬于日志流水,每日新增數(shù)據(jù),數(shù)據(jù)記錄重復(fù)程度非常低,每條都基本唯一,數(shù)據(jù)記錄冗余度基本,為,0,存儲總體占比不高,且數(shù)據(jù)冗余度較低,優(yōu)化空間有限,數(shù)據(jù)特點
4、,:,有業(yè)務(wù)主鍵,確保記錄唯一,數(shù)據(jù)只有新增操作,不會變更或刪除,每天只需保留當(dāng)天新增評價,數(shù)據(jù)記錄冗余,度,基本為,0,思考,&,討論,20100906,消失記錄,(,包括被刪除及被變更記錄,),,占,2%,左右,20100906,和,20100907,未發(fā)生變更部分,占總體的,95%,以上,正是這部分的重復(fù)存儲過多的消耗了存儲成本,20100907,新增記錄,(,包括純新增及變更后記錄,),,占,3%,左右,20100906,20100907,問題,:,如,何,設(shè)計方案達(dá)到以下效果,?,減少,/,去除冗余數(shù)據(jù),降低存儲成本,保證快照數(shù)據(jù)的快速訪問,對業(yè)務(wù)應(yīng)用透明或降低應(yīng)用改造成本,參考方案
5、,增量數(shù)據(jù),2010,年,4,月,2,日全量,latest,分區(qū),2010,年,4,月,2,日失效分區(qū),2010,年,4,月,1,日全量,2010,年,4,月,2,日,2010,年,4,月,1,日,2010,年,4,月,3,日全量,latest,分區(qū),2010,年,4,月,3,日失效分區(qū),2010,年,4,月,3,日,2010,年,4,月,30,日全量,latest,分區(qū),2010,年,4,月,30,日失效分區(qū),2010,年,4,月,30,日,增量數(shù)據(jù),增量數(shù)據(jù),注,:,類似于數(shù)據(jù)庫系統(tǒng)中常見的增量備份或周期備份策略,優(yōu)點,:,易于理解,在數(shù)據(jù)庫備份中廣泛應(yīng)用,實現(xiàn)較為簡單,缺點,:,訪問快照
6、數(shù)據(jù)成本太高,無法直接反應(yīng)刪除,/,被變更數(shù)據(jù),需要額外設(shè)計,應(yīng)用改造成本較高,記錄生命周期,數(shù)據(jù)天生以行進(jìn)行分割,行數(shù)據(jù)在數(shù)據(jù)庫中稱為一條數(shù)據(jù)記錄,(Record).,一,條記錄對應(yīng)可能有,Insert/Update/Delete,操作,Insert,通常對應(yīng)一條全新的記錄,意味著記錄的新生,Delete,通常是原有的記錄被刪除,意味著記錄的死亡,Update,是在原有的記錄上修改某些字段,一條,Update,操作可以拆分為,Delete/Insert,原子對操作,即從記錄的維度來看,相當(dāng)于前一條記錄死亡,后一條記錄新生,因此,我們可以認(rèn)為,任何一條記錄,(,行數(shù)據(jù),),必定在歷史上某天新生
7、,(start),,并在其后的某一天死亡,(end),,而這個,start-end,對就定義為該記錄的生命周期。,活躍數(shù)據(jù)和死亡數(shù)據(jù),活躍數(shù)據(jù),一條記錄,在其產(chǎn)生之后直至當(dāng)天仍舊存活,(,未被,Delete/Update),,那么我們認(rèn)為它是一條活躍數(shù)據(jù),對于活躍數(shù)據(jù),其產(chǎn)生,(start),日期已經(jīng)明確,但死亡,(end),日期并不確定,數(shù)據(jù)標(biāo)簽,:start-INFINITY(,無窮大,),如,20110401-INF,死亡數(shù)據(jù),一條記錄,,在當(dāng)天以前就被更改,(,被,Delete/Update),,那么我們認(rèn)為它是一,條死亡了的數(shù)據(jù),對于死亡數(shù)據(jù),,其產(chǎn)生,(start,),和死亡,(e
8、nd),日期都已經(jīng)明確,數(shù)據(jù)標(biāo)簽,:start-end,如,20110401-200110423,INF,目錄存放在某一天新增并且一直未曾被刪除或修改的記錄,(,即活躍數(shù)據(jù),),此處省略一萬字,0901-0902,0901-0903,0901-0904,0901-09.,0901-0930,0901-INF,0902-0903,0902-0904,0902-09.,0902-0930,0902-INF,0903-0904,0903-09.,0903-0930,0903-INF,09n-09(n+1),09n-0930,09n-INF,0929-0930,0929-INF,0930-INF,極限
9、存儲,極限存儲原理,三,個,結(jié)論,:,任意,一,條記錄,由于其生命周期確定,必定對應(yīng)唯一的一個數(shù)據(jù)標(biāo)簽,一,個數(shù)據(jù)標(biāo)簽對應(yīng)符合該生命周期的記錄集合,(,該記錄集合有為空的可能性,),歷史上出現(xiàn)的所有記錄,必然可以成功的劃分到不,同,的生命周期數(shù)據(jù)標(biāo)簽里去,歷史快照,原理,TimeLine,0413,0414 0415,0416 INF,INF,0414 ,INF,0201 0413,0313,0314 INF,0313,0314 0415,0416 INF,0413,0414 0416,0417 INF,0413,0414 0417,0418 INF,0414 INF,0201 0413,03
10、13,0314 0414,0415 INF,0310,0311 0421,0422 INF,所有被藍(lán)色線條經(jīng)過的數(shù)據(jù)標(biāo)簽,其數(shù)據(jù)內(nèi)容組合起來即為,0414,這天的數(shù)據(jù)全量快照,同理,歷史上任意一天的數(shù)據(jù)快照均可以該方式獲得,歷史區(qū)間快照,原理,TimeLine,0413,0414 0415,0416 INF,INF,0414 ,INF,0201 0413,0313,0314 INF,0313,0314 0415,0416 INF,0413,0414 0416,0417 INF,0413,0414 0417,0418 INF,0414 INF,0201 0413,0313,0314 0414,0
11、415 INF,0310,0311 0421,0422 INF,所有在兩條藍(lán)色線條以內(nèi)以及穿過任意一條藍(lán)色線條的數(shù)據(jù)標(biāo)簽,其數(shù)據(jù)內(nèi)容組合起來即為,0314-0415,的數(shù)據(jù)全量快照,方案,主體,邏輯,包含以下主要步驟:,1.通過主鍵關(guān)聯(lián)對比昨天全量和今天全量的數(shù)據(jù)差異,并將這些,數(shù)據(jù),區(qū),分為,活躍,(Lived),或,過期,(Expired),數(shù)據(jù)。,2.對于對比的結(jié)果數(shù)據(jù)進(jìn)行統(tǒng)計,獲得每個生命周期下實際的數(shù)據(jù)條,數(shù),,統(tǒng)計結(jié)果用來產(chǎn)生不同生命周期的記錄到文件目錄的映射。,3.使用mapreduce數(shù)據(jù)對第1步結(jié)果進(jìn)行分發(fā),相同生命周期的數(shù)據(jù)會被寫入到對應(yīng)的唯一的生命周期目錄,下,(,依賴,
12、2,的統(tǒng)計結(jié)果,),。,4.使用hive的雙重分區(qū)映射生命周期目錄,這樣用戶可以通過靈活的hive分區(qū)過濾來獲得期望的數(shù)據(jù),。,5.數(shù)據(jù)驗證,為了保證應(yīng)用極限存儲后結(jié)果的正確性,因此增加了數(shù)據(jù)條數(shù)對比的驗證規(guī)則。,方案,主體,邏輯,記錄生命周期標(biāo)簽云,0401-0402,0401-0403,0401-0404,0402-0403,0402-0404,2010,年,4,月,23,日全量,2010,年,4,月,22,日全量,(,極限存儲,),20100401-20100423,20100402-20100423,2010,0,408-20100423,2010,0,422-20100423,201
13、0,0,423-INF,2010,0,409-20100423,數(shù)據(jù)分揀,Hive,介紹,全文對比,數(shù)據(jù)統(tǒng)計,數(shù)據(jù)分揀,分區(qū)映射,數(shù)據(jù)驗證,遇到的問題,產(chǎn)生的目錄,/,文件數(shù),非常多,產(chǎn)生目錄數(shù)及文件數(shù)按日呈級數(shù)增長,一個月產(chǎn)生,465,個目錄,一年產(chǎn)生,66795,個目錄,文件數(shù),=,目錄數(shù),*reduce,數(shù),(,如,1000),對,NameNode,壓力非常,大,對應(yīng)分區(qū)非常多,,Hive,元數(shù)據(jù)庫壓力也很大,文件大小不均勻,如何快速訪問任意一天,/,一段時期的快照數(shù)據(jù),分揀中運行出錯會導(dǎo)致數(shù)據(jù)損壞或丟失,不同月份數(shù)據(jù)并行運行丟失數(shù)據(jù)問題,單個數(shù)據(jù)標(biāo)簽內(nèi)數(shù)據(jù)損壞,/,丟失導(dǎo)致一段時期內(nèi)快
14、照不準(zhǔn),其他的一些保護(hù)機(jī)制,應(yīng)用效果,迄今為止已有,30,余種業(yè)務(wù)數(shù)據(jù)完成應(yīng)用,累積節(jié)省存儲達(dá),15PB,。,極限,存儲,使用方法,Hive:,取某天快照,:,select,*from,tb_users_exst,where,pt_start20100410,取某天快照,(UDF,方式,):,select,*from,tb_users_exst where,exst_pt,(pt_start,pt_end,20100410),取一段時間快照,:,select,*from,tb_users_exst,where pt_start,20100410,Hadoop:,在調(diào)用,setInputDir,
15、之前通過提供的方法獲得生命周期目錄列表,如下,:,List dateLists=DateListGenerator.generateExStoreListDirs(/,group/taobao/taobao/hive/tb_users_exst,20100410);,極限,存儲,應(yīng)用場景,查看一件商品,2011,年的變更歷史,:,不使用極限存儲,:,select*from tb_auctions where,pt=20110101 and pt=20110731,掃描數(shù)據(jù)量,:450G*7*30=92TB,使用極限存儲,:,s,elect*from tb_auctions_exst where
16、,pt_start,20110731,掃描數(shù)據(jù)量,:450G*7*2,膨脹率,=6TB(,當(dāng)前實現(xiàn),),450G*2,膨脹率,=900G(,理想情況,),獲取某天增量,(delta),數(shù)據(jù),:,select*from,tb_auctions where pt_start=20110105,注,:,月頭不適用,,1,號增量需要額外計算,極限,存儲,方案優(yōu)化,性能優(yōu)化,:,支持從極限存儲全量,&,當(dāng)天增量產(chǎn)生極限存儲數(shù)據(jù),計算時間從,2,個小時下降至,1,個小時,計算成本下降了,5,0%,優(yōu)化調(diào)整運行參數(shù),:,set io.sort.spill.percent=0.80;set io.sort.mb=512;set io.sort.factor=32;set io.sort.record.percent=0.04;set mapred.reduce.parallel.copies=8;set mapred.job.shuffle.input.buffer.percent=0.70;,易用性,優(yōu)化,:,Hive,層增加,hook,,實現(xiàn),SQL,自動替換,對用戶及上層業(yè)務(wù)透明。,如,:,se