海量數(shù)據(jù)的高效存儲(chǔ)-淘寶云梯極限存儲(chǔ)的原理和實(shí)踐_第1頁
海量數(shù)據(jù)的高效存儲(chǔ)-淘寶云梯極限存儲(chǔ)的原理和實(shí)踐_第2頁
海量數(shù)據(jù)的高效存儲(chǔ)-淘寶云梯極限存儲(chǔ)的原理和實(shí)踐_第3頁
海量數(shù)據(jù)的高效存儲(chǔ)-淘寶云梯極限存儲(chǔ)的原理和實(shí)踐_第4頁
海量數(shù)據(jù)的高效存儲(chǔ)-淘寶云梯極限存儲(chǔ)的原理和實(shí)踐_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1場景方案效果優(yōu)化第1頁/共30頁云梯1前端RDBMS其他集群點(diǎn)擊流日志LogServereveryday…everytime…云梯的存儲(chǔ)職責(zé)DataXTimeTunnelDBSync第2頁/共30頁200801012008010220080103……20110720商品表500G502G505G…G1000G……2008010220080103……20110720用戶表200G202G205G…G300G……2008010220080103……20110720點(diǎn)擊流日志200G202G205G…G300G第3頁/共30頁怎么辦?怎么辦?怎么辦?刪除歷史數(shù)據(jù),立竿見影,省力又省事怎么辦?200801012008010220080103……20110720商品表500G502G505G…G1000G第4頁/共30頁“21世紀(jì)核心的競爭是數(shù)據(jù)的競爭”“誰擁有更多數(shù)據(jù),誰就擁有未來”

前端交易系統(tǒng)、商品中心、用戶中心等出于效率的考慮,不會(huì)長期保存大量歷史數(shù)據(jù),而數(shù)據(jù)平臺(tái)作為企業(yè)數(shù)據(jù)分析及挖掘的基礎(chǔ)設(shè)施,天生具有保存歷史數(shù)據(jù)的職責(zé),非但如此,如何快速、高效的獲取歷史上任意一天的快照數(shù)據(jù)也成為設(shè)計(jì)歷史數(shù)據(jù)存放方式時(shí)的重要考量。第5頁/共30頁數(shù)據(jù)分類商品表:商品ID商品名商品狀態(tài)創(chuàng)建時(shí)間所屬類目……交易表:訂單ID支付ID物流ID支付時(shí)間訂單狀態(tài)……典型操作:新增商品/訂單(new)商品/訂單狀態(tài)變更(update)商品下線/訂單撤銷(delete)典型的數(shù)據(jù)庫增刪改操作數(shù)據(jù)特點(diǎn):有業(yè)務(wù)主鍵,確保記錄唯一性全量快照數(shù)據(jù)量巨大(>1TB),數(shù)據(jù)分析需要全量快照數(shù)據(jù)每日變更量占比很少(遠(yuǎn)低于5%)數(shù)據(jù)記錄冗余度非常高注:變更指發(fā)生增刪改的記錄※當(dāng)時(shí)存量數(shù)據(jù)中70%屬于此類特征的業(yè)務(wù)數(shù)據(jù),且記錄冗余度高第6頁/共30頁數(shù)據(jù)分類評價(jià)增量表:評價(jià)ID用戶星級(jí)用戶昵稱評價(jià)記錄商品名稱……點(diǎn)擊流日志:記錄時(shí)間IP地址引用鏈接機(jī)器ID用戶ID……數(shù)據(jù)特點(diǎn):沒有業(yè)務(wù)主鍵屬于日志流水,每日新增數(shù)據(jù)數(shù)據(jù)記錄重復(fù)程度非常低,每條都基本唯一數(shù)據(jù)記錄冗余度基本為0※存儲(chǔ)總體占比不高,且數(shù)據(jù)冗余度較低,優(yōu)化空間有限數(shù)據(jù)特點(diǎn):有業(yè)務(wù)主鍵,確保記錄唯一數(shù)據(jù)只有新增操作,不會(huì)變更或刪除每天只需保留當(dāng)天新增評價(jià)數(shù)據(jù)記錄冗余度基本為0第7頁/共30頁思考&討論20100906消失記錄(包括被刪除及被變更記錄),占2%左右

20100906和20100907未發(fā)生變更部分,占總體的95%以上,正是這部分的重復(fù)存儲(chǔ)過多的消耗了存儲(chǔ)成本20100907新增記錄(包括純新增及變更后記錄),占3%左右

2010090620100907問題:如何設(shè)計(jì)方案達(dá)到以下效果?減少/去除冗余數(shù)據(jù),降低存儲(chǔ)成本保證快照數(shù)據(jù)的快速訪問對業(yè)務(wù)應(yīng)用透明或降低應(yīng)用改造成本第8頁/共30頁參考方案增量數(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)點(diǎn):易于理解,在數(shù)據(jù)庫備份中廣泛應(yīng)用實(shí)現(xiàn)較為簡單缺點(diǎn):訪問快照數(shù)據(jù)成本太高無法直接反應(yīng)刪除/被變更數(shù)據(jù),需要額外設(shè)計(jì)應(yīng)用改造成本較高第9頁/共30頁記錄生命周期數(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ù))必定在歷史上某天新生(start),并在其后的某一天死亡(end),而這個(gè)start-end對就定義為該記錄的生命周期。第10頁/共30頁活躍數(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)和死亡(end)日期都已經(jīng)明確數(shù)據(jù)標(biāo)簽:start-end,如20110401-200110423第11頁/共30頁INF目錄存放在某一天新增并且一直未曾被刪除或修改的記錄(即活躍數(shù)據(jù))此處省略一萬09030901-09040901-09.IN09040902-09.IN09.INF09n-09(n+1)09n-093009n-ININF0930-INF極限存儲(chǔ)極限存儲(chǔ)原理三個(gè)結(jié)論:任意一條記錄,由于其生命周期確定,必定對應(yīng)唯一的一個(gè)數(shù)據(jù)標(biāo)簽一個(gè)數(shù)據(jù)標(biāo)簽對應(yīng)符合該生命周期的記錄集合(該記錄集合有為空的可能性)歷史上出現(xiàn)的所有記錄,必然可以成功的劃分到不同的生命周期數(shù)據(jù)標(biāo)簽里去第12頁/共30頁歷史快照原理TimeLine……0413041404150416INF…… INF0414…………INF02010413………03130314 INF……0313031404150416INF……0413041404160417INF……0413041404170418INF0414 INF02010413………0313031404140415 INF…… ………………………………0310031104210422INF所有被藍(lán)色線條經(jīng)過的數(shù)據(jù)標(biāo)簽,其數(shù)據(jù)內(nèi)容組合起來即為0414這天的數(shù)據(jù)全量快照同理,歷史上任意一天的數(shù)據(jù)快照均可以該方式獲得第13頁/共30頁歷史區(qū)間快照原理TimeLine……0413041404150416INF…… INF0414…………INF02010413………03130314 INF……0313031404150416INF……0413041404160417INF……0413041404170418INF0414 INF02010413………0313031404140415 INF…… ………………………………0310031104210422INF所有在兩條藍(lán)色線條以內(nèi)以及穿過任意一條藍(lán)色線條的數(shù)據(jù)標(biāo)簽,其數(shù)據(jù)內(nèi)容組合起來即為0314-0415的數(shù)據(jù)全量快照第14頁/共30頁方案主體邏輯包含以下主要步驟:1.通過主鍵關(guān)聯(lián)對比昨天全量和今天全量的數(shù)據(jù)差異,并將這些數(shù)據(jù)區(qū)分為活躍(Lived)或過期(Expired)數(shù)據(jù)。2.對于對比的結(jié)果數(shù)據(jù)進(jìn)行統(tǒng)計(jì),獲得每個(gè)生命周期下實(shí)際的數(shù)據(jù)條數(shù),統(tǒng)計(jì)結(jié)果用來產(chǎn)生不同生命周期的記錄到文件目錄的映射。3.使用mapreduce數(shù)據(jù)對第1步結(jié)果進(jìn)行分發(fā),相同生命周期的數(shù)據(jù)會(huì)被寫入到對應(yīng)的唯一的生命周期目錄下(依賴2的統(tǒng)計(jì)結(jié)果)。4.使用hive的雙重分區(qū)映射生命周期目錄,這樣用戶可以通過靈活的hive分區(qū)過濾來獲得期望的數(shù)據(jù)。5.數(shù)據(jù)驗(yàn)證,為了保證應(yīng)用極限存儲(chǔ)后結(jié)果的正確性,因此增加了數(shù)據(jù)條數(shù)對比的驗(yàn)證規(guī)則。第15頁/共30頁方案主體邏輯記錄生命周期標(biāo)簽04030401-04040402-04030402-0404……2010年4月23日全量2010年4月22日全量(極限存儲(chǔ))20100401-2010042320100402-2010042320100408-2010042320100422-2010042320100423-INF………20100409-20100423數(shù)據(jù)分揀Hive介紹全文對比數(shù)據(jù)統(tǒng)計(jì)數(shù)據(jù)分揀分區(qū)映射數(shù)據(jù)驗(yàn)證第16頁/共30頁遇到的問題

產(chǎn)生的目錄/文件數(shù)非常多產(chǎn)生目錄數(shù)及文件數(shù)按日呈級(jí)數(shù)增長一個(gè)月產(chǎn)生465個(gè)目錄,一年產(chǎn)生66795個(gè)目錄

文件數(shù)=目錄數(shù)*reduce數(shù)(如1000)對NameNode壓力非常大對應(yīng)分區(qū)非常多,Hive元數(shù)據(jù)庫壓力也很大文件大小不均勻如何快速訪問任意一天/一段時(shí)期的快照數(shù)據(jù)分揀中運(yùn)行出錯(cuò)會(huì)導(dǎo)致數(shù)據(jù)損壞或丟失不同月份數(shù)據(jù)并行運(yùn)行丟失數(shù)據(jù)問題單個(gè)數(shù)據(jù)標(biāo)簽內(nèi)數(shù)據(jù)損壞/丟失導(dǎo)致一段時(shí)期內(nèi)快照不準(zhǔn)其他的一些保護(hù)機(jī)制第17頁/共30頁應(yīng)用效果迄今為止已有30余種業(yè)務(wù)數(shù)據(jù)完成應(yīng)用,累積節(jié)省存儲(chǔ)達(dá)15PB。第18頁/共30頁極限存儲(chǔ)使用方法Hive:取某天快照: select*fromtb_users_exstwhere pt_start<=‘20100410’andpt_end>‘20100410'取某天快照(UDF方式): select*fromtb_users_exstwhere

exst_pt(pt_start,pt_end,'

20100410')取一段時(shí)間快照:

select*fromtb_users_exstwhere pt_start<='20100420'andpt_end>'20100410'Hadoop:在調(diào)用setInputDir之前通過提供的方法獲得生命周期目錄列表,如下:List<String>dateLists=DateListGenerator.generateExStoreListDirs("/group/taobao/taobao/hive/tb_users_exst","20100410");第19頁/共30頁極限存儲(chǔ)應(yīng)用場景查看一件商品2011年的變更歷史:不使用極限存儲(chǔ):select*fromtb_auctionswherept>=20110101andpt<=20110731掃描數(shù)據(jù)量:450G*7*30=92TB使用極限存儲(chǔ):select*fromtb_auctions_exstwherept_start<=20110101andpt_end>20110731掃描數(shù)據(jù)量:450G*7*2[膨脹率]=6TB(當(dāng)前實(shí)現(xiàn))

450G*2[膨脹率]=900G(理想情況)獲取某天增量(delta)數(shù)據(jù):select*fromtb_auctionswherept_start=20110105注:月頭不適用,1號(hào)增量需要額外計(jì)算第20頁/共30頁極限存儲(chǔ)方案優(yōu)化性能優(yōu)化:支持從極限存儲(chǔ)全量&當(dāng)天增量產(chǎn)生極限存儲(chǔ)數(shù)據(jù)計(jì)算時(shí)間從2個(gè)小時(shí)下降至1個(gè)小時(shí)計(jì)算成本下降了50%優(yōu)化調(diào)整運(yùn)行參數(shù):setio.sort.spill.percent=0.80;

setio.sort.mb=512;

setio.sort.factor=32;

setio.sort.record.percent=0.04;

setmapred.reduce.parallel.copies=8;

setmapred.job.shuffle.input.buffer.percent=0.70;易用性優(yōu)化:

Hive層增加hook,實(shí)現(xiàn)SQL自動(dòng)替換,對用戶及上層業(yè)務(wù)透明。

如: select*fromtb_userswherept=‘20100410’經(jīng)過Hook層語意解析轉(zhuǎn)換后變?yōu)? select*fromtb_users_exstwherept_start<=‘20100410’andpt_end>‘20100410'第21頁/共30頁思考環(huán)節(jié)源表主鍵不唯一會(huì)出現(xiàn)什么情況?如何快速處理?與參考方案相比,優(yōu)點(diǎn)在哪里?聯(lián)系方式:

微博:/phrack淘圖海

郵箱:tuhai@第22頁/共30頁第23頁/共30頁Hive相關(guān)介紹什么是Hive?Hive是建立在Hadoop上的、提供了類SQL界面的數(shù)據(jù)倉庫基礎(chǔ)構(gòu)架。Hive分區(qū)表一個(gè)Hive表可以擁有一級(jí)或多級(jí)分區(qū)(組合分區(qū)),每個(gè)分區(qū)對應(yīng)一個(gè)目錄,該目錄下所有文件的數(shù)據(jù)合集為該Hive表的分區(qū)數(shù)據(jù)。Hive分區(qū)表中的分區(qū)字段為偽列,不實(shí)際占用任何存儲(chǔ)空間,僅通過分區(qū)名進(jìn)行保存判斷分區(qū)時(shí)可以通過>、<符號(hào)進(jìn)行分區(qū)范圍限定,如可以通過pt>=20110401andpt=<20110430獲取4月份的所有分區(qū)第24頁/共30頁Hive相關(guān)介紹Hive數(shù)據(jù)在云梯(Hadoop)上的存放形式

每個(gè)目錄下有若干個(gè)數(shù)據(jù)文件,通常文件中每行數(shù)據(jù)對應(yīng)Hive表的一條記錄,列之前通過給定的分割符進(jìn)行分割。

數(shù)據(jù)文件可以是壓縮的,也可以是非壓縮的,只要和Hive元數(shù)據(jù)中保存的分區(qū)信息一致即可。pt=20100906/group/taobao/taobao/hive/$table/pt=20100906pt=20100907/group/taobao/taobao/hive/$table/pt=20100907pt=201009../group/taobao/taobao/hive/$table/pt=201009..$table返回第25頁/共30頁全文對比通過Hive實(shí)現(xiàn)對相鄰兩天的數(shù)據(jù)全量對比,區(qū)分活躍與死亡數(shù)據(jù),并同時(shí)獲得其生命周期信息:FROM(SELECT*FROMtb_users_exstWHEREpt_start<='20100422'ANDpt_end>'20100422')oFULLOUTERJOIN(SELECT*FROMtb_users

WHEREpt='20100423000000')nONo.id=n.idINSERTOVERWRITETABLEt_ext_20100423_tb_users

PARTITION(pt='EXPIRED')SELECT…o.pt_start,'20100423‘WHEREn.idISNULLOR(n.id<>o.id)OR(n.nick<>o.nick)…INSERTOVERWRITETABLEt_ext_20100423_tb_users

PARTITION(pt='LIVE')SELECT…if(o.idISNULLOR(n.nick<>o.nick)…,'20100423',o.pt_start)asbirth_date,NULLasexpired_dateWHEREn.idISNOTNULLt_ext_20100423_tb_users比tb_users多了兩個(gè)字段: birth_date:記錄的產(chǎn)生日期,不可能為NULL expired_date:記錄的消亡日期,如果未死則為NULL返回第26頁/共30頁數(shù)據(jù)統(tǒng)計(jì)通過Hive統(tǒng)計(jì)落在各個(gè)生命周期區(qū)間內(nèi)的數(shù)據(jù)條數(shù):INSERTOVERWRITETABLEt_exs_tb_usersPARTITION(pt='20100423000000')SELECTbirth_date,expired_date,count(1)FROMt_ext_20100423_tb_usersGROUPBYbirth_date,expired_date注:這里的統(tǒng)計(jì)信息主要用來為下一步mapreduce作業(yè)提供參考,比如計(jì)算最終合理的文件數(shù)。返回第27頁/共30頁數(shù)據(jù)分揀經(jīng)過前面的處理,t_ext_20100423_tb_users兩個(gè)分區(qū)(LIVED,EXPIRED)下的數(shù)據(jù)其最后兩列分別為birth_date和expired_date,即對應(yīng)數(shù)據(jù)記錄的產(chǎn)生和死亡日期,因此mapreduce可以根據(jù)這個(gè)信息得知該目錄應(yīng)該存放至那個(gè)生命周期目錄下。生命周期目錄下云梯1上表現(xiàn)為如下形式:s_bmw_usres_exst`--201004#每月數(shù)據(jù)存放在月份目錄下|--201004#該目錄下存放本月新增且至今未死亡的數(shù)據(jù)||--20100401#0401產(chǎn)生且未死亡||--20100402…|`--20100423#0423產(chǎn)生且未死亡|--20100401-20100402#0401產(chǎn)生且0402死亡(被刪除或更新)|--20100401-20100403#0401產(chǎn)生且0403死亡(被刪除或更新)|--20100401-20100404…|--20100421-20100423`--20100422-20100423對于以下兩條t_ext_20100423_tb_users表的記錄,mapreduce會(huì)分別將其分發(fā)到/201004/20100403和/20100

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論