九游娛樂:2024BitMap在大數(shù)據(jù)精準(zhǔn)營(yíng)銷中的應(yīng)用docx
今天分享主題分為四個(gè)方面,第一個(gè)是項(xiàng)目背景,第二個(gè)依據(jù)項(xiàng)目需求的技術(shù)選型,接著就是項(xiàng)目架構(gòu),最后講一下項(xiàng)目實(shí)現(xiàn)過程中的一些細(xì)節(jié)。
我們的數(shù)據(jù)主要有兩種,一種是用戶賬號(hào)數(shù)據(jù),數(shù)據(jù)量有十億,這些數(shù)據(jù)包括很多類型,比如uid,用戶設(shè)備號(hào)等。還有就是用戶標(biāo)簽數(shù)據(jù),也達(dá)到千萬(wàn)級(jí),包含數(shù)據(jù)用的社會(huì)屬性,比如性別、年齡段等,也包括用戶的興趣愛好以及最近的上網(wǎng)行為標(biāo)簽,其實(shí)這類數(shù)據(jù)就是用戶畫像。這類數(shù)據(jù)就對(duì)應(yīng)相應(yīng)的產(chǎn)品線,如精準(zhǔn)營(yíng)銷中有個(gè)“易獲客”項(xiàng)目,這個(gè)項(xiàng)目背景就是客戶在頁(yè)面通過用戶標(biāo)簽快速精準(zhǔn)匹配用戶群體,然后通過短信、電話進(jìn)行營(yíng)銷。當(dāng)時(shí)有兩種部署方式,一種是公司部署一套,客戶通過外網(wǎng)訪問;另外一種就是有些客戶對(duì)數(shù)據(jù)安全性比較高,我們會(huì)把服務(wù)部署到客戶,客戶就在頁(yè)面選擇一些標(biāo)簽,點(diǎn)擊查詢返回滿足要求用戶信息。
技術(shù)選型依據(jù)數(shù)據(jù)特點(diǎn),數(shù)據(jù)量大但也不是特別大,有千萬(wàn)級(jí)標(biāo)簽+十億級(jí)用戶;依據(jù)項(xiàng)目需求,需要很多維度,用戶標(biāo)簽分布于幾百上千個(gè)維度,沒有度量概念,度量和維度都是olap中的概念。除了數(shù)據(jù)之外還有產(chǎn)品要求,需要在線應(yīng)用,性能要求較高,必須做到毫秒級(jí)響應(yīng);數(shù)據(jù)量不斷增長(zhǎng),必須做到底層數(shù)據(jù)存儲(chǔ)和計(jì)算可擴(kuò)展性以應(yīng)對(duì)數(shù)據(jù)量的增加;同時(shí)希望產(chǎn)品不屬于用戶方,再出現(xiàn)問題時(shí)能夠很容易恢復(fù),需要代碼可控。
基于這些需求,對(duì)開源技術(shù)進(jìn)行相關(guān)調(diào)研,像Kylin/Druid都是多維分析常見的工具,但是我們并沒有使用。這兩個(gè)框架都會(huì)做一些數(shù)據(jù)預(yù)計(jì)算/聚合,都能做到亞秒級(jí)查詢,像Kylin
底層是基于HBase可擴(kuò)展性很強(qiáng),Druid本身就是一個(gè)分布式系統(tǒng),兩個(gè)框架都是開源。但是我們選用Bit,因?yàn)橐罁?jù)數(shù)據(jù)需求簡(jiǎn)單而且Bit只有維度沒有度量,還有就是維度個(gè)數(shù)多,查詢是基于用戶uid,查詢明細(xì)數(shù)據(jù)。在查詢明細(xì)中Druid有兩個(gè)問題,如果將uid和維度存儲(chǔ)Kylin和Druid,對(duì)維度的基數(shù)有限制,會(huì)構(gòu)建維度字典,光一個(gè)uid就有4G,因此在幾百上千維度查詢效率會(huì)降低;還有一個(gè)就是uid用戶量大,Kylin和Druid會(huì)將uid和其他維度進(jìn)行組合會(huì)出現(xiàn)很多情況,會(huì)額外增加數(shù)據(jù)量,因此這種請(qǐng)款也不適合用Kylin,還有就是Kylin會(huì)對(duì)維度構(gòu)建索引,uid索引會(huì)很大,查詢效率也是很低?;谶@些要求還有其他一些技術(shù)需求,最終方案是使用HBASE+BitMap的自研框架,HBASE主要做數(shù)據(jù)存儲(chǔ),將HBASE做處理器做并行計(jì)算,BitMap構(gòu)建索引。
HBASE是由一個(gè)active和regionmaster作為服務(wù)主節(jié)點(diǎn),有Hfile子節(jié)點(diǎn)和多個(gè)regionserver,底層是HDFS層,每一個(gè)regionserver管理很多region,每一個(gè)region會(huì)根據(jù)數(shù)據(jù)量會(huì)有很多Storefile,這幾者是依靠客戶端協(xié)調(diào)。接著說一下HBASE表分區(qū),HBASE表里面很為很多region,我們一般會(huì)設(shè)置每個(gè)region的最大值達(dá)到最大值自動(dòng)分裂。而每一個(gè)region會(huì)有管理范圍,分區(qū)是用regionserver管理。
HBASE有很多特點(diǎn),第一個(gè)就是海量存儲(chǔ),其底層是基于HDFS,是橫向存儲(chǔ),可以加很多節(jié)點(diǎn),支持PB級(jí)數(shù)據(jù)存儲(chǔ);按列存儲(chǔ),將樹屬性相似的放到列組里面,壓縮比比較高;第三個(gè)就是極易擴(kuò)展,分為存儲(chǔ)和計(jì)算,都是分布式存儲(chǔ)和計(jì)算;然后高并發(fā),單機(jī)讀寫性能在2w+;第五個(gè)就是稀疏,當(dāng)列中屬性為空,不占用存儲(chǔ)空間。
前面講存儲(chǔ)是HBASE,計(jì)算是HBASE協(xié)處理器,HBASE協(xié)處理器分為兩種,一種是Endpoint,一種是regionserver。與數(shù)據(jù)中存儲(chǔ)過程和觸發(fā)器類似,項(xiàng)目用的是Endpoint,類似于數(shù)九游娛樂據(jù)庫(kù)中的存儲(chǔ)過程。上圖左右兩邊目的相同都是統(tǒng)計(jì)表的行數(shù),不用協(xié)處理器會(huì)直接在命令行中count相關(guān)表,從每一個(gè)region里面掃描最后得到結(jié)果,這種方式耗時(shí)很大,由于串行計(jì)算,同時(shí)會(huì)將數(shù)據(jù)從服務(wù)端加載到客戶端。Endpoint會(huì)以并行方式實(shí)現(xiàn),會(huì)將客戶端請(qǐng)求發(fā)送到所有region上,每個(gè)region分擔(dān)數(shù)據(jù)量,最后將數(shù)據(jù)返回協(xié)處理器客戶端,然后匯總聚合,這樣運(yùn)行速度快很多。速度快一個(gè)是并行計(jì)算,另一個(gè)是將計(jì)算的數(shù)據(jù)移動(dòng)到服務(wù)端,這樣數(shù)據(jù)穩(wěn)定性高,直接從本地加載數(shù)據(jù)計(jì)算也會(huì)減少開銷,協(xié)處理器返回客戶端是數(shù)據(jù)的數(shù)量。
可能你們會(huì)對(duì)BitMap了解很少,其應(yīng)用場(chǎng)景比較單一,但是在某些方面效果比較好。BitMap底層實(shí)現(xiàn)是一個(gè)位數(shù)組,位數(shù)組的value取值只能是0或1,因?yàn)槭菙?shù)組,數(shù)組下標(biāo)是整數(shù)范圍內(nèi)的取值,最大為2147483647。上圖中長(zhǎng)度為10的BitMap,通過BitMap的api進(jìn)行相關(guān)設(shè)置,會(huì)將對(duì)應(yīng)的下標(biāo)設(shè)置為1,如圖中6、3、5、7的下標(biāo)都設(shè)為1。BitMap可以進(jìn)行布爾計(jì)算,可以求交集和求并集,其取值是0或1(或者是或否,出現(xiàn)與不出現(xiàn)),節(jié)省存儲(chǔ)空間。BitMap的應(yīng)用一個(gè)是數(shù)據(jù)排序,排序要求數(shù)據(jù)不能重復(fù)。第二個(gè)就是Bloomfilter,是對(duì)應(yīng)于一組hashmap對(duì)應(yīng)一個(gè)BitMap,是犧牲一定錯(cuò)誤率來(lái)釋放存儲(chǔ)空間,如在HBASE的索引和爬蟲URL判重。但是重點(diǎn)是作為索引,其實(shí)它在數(shù)據(jù)庫(kù)、搜索引擎和OLAP應(yīng)用很多。
舉一個(gè)例子說明下,如上圖是一個(gè)數(shù)據(jù)表有四列,下面是一個(gè)簡(jiǎn)單查詢,查詢有性別和婚姻狀況兩個(gè)維度,性別有兩個(gè)取值,婚姻狀況有三個(gè)取值,BitMap首先會(huì)在維度里面構(gòu)建BitMap,第一步如何構(gòu)建性別的BitMap,對(duì)于性別這個(gè)列,位圖索引形成兩個(gè)向量,男向量為10100...,向量的每一位表示該行是否是男,如果是則位1,否為0,同理,女向量位01011。第二部構(gòu)建婚姻狀況的BitMap,婚姻狀況這一列,位圖索引生成三個(gè)向量,已婚為11000...,未婚為00100...,離婚為00010...。這樣就構(gòu)建完需要查詢的BitMap,首先將性別為男的標(biāo)簽?zāi)贸鰜?lái),然后將婚姻狀況為未婚的標(biāo)簽?zāi)贸鰜?lái)求交,這樣就定為下標(biāo)為2,就查出滿足需要的結(jié)果。
BitMap有很多實(shí)現(xiàn)方式,構(gòu)建框架也有很多。最后我們選用RoaringBitmap,選擇的原因在于:我們存儲(chǔ)的是整數(shù),將下標(biāo)標(biāo)簽取值設(shè)為1,該框架將整數(shù)i的高16位會(huì)被用于構(gòu)造塊,存儲(chǔ)到keys中,低16位則被看做value,存儲(chǔ)到Container[]values中的某個(gè)Container中,兩個(gè)數(shù)組通過下標(biāo)對(duì)應(yīng)。BitMap是分快實(shí)現(xiàn)的,有三個(gè)特點(diǎn)就是分塊存儲(chǔ)、壓縮、計(jì)算,這樣在BitMap使用時(shí)可以按塊解壓節(jié)省內(nèi)存空間。但是在計(jì)算時(shí)必須全部解壓。RoaringBitmap在開源框架里應(yīng)用很多,如olap中有kylin、Druid、piont等,搜索引擎方面有Lucene、slor、Elasticserach等,還有spark、hive、tez等。也有很多實(shí)現(xiàn)語(yǔ)言,比如Java、C、C++、Python等。
前面介紹了項(xiàng)目背景、技術(shù)選型,接下來(lái)介紹下基于HBASE和BitMap實(shí)現(xiàn)的項(xiàng)目框架構(gòu)建。上圖是項(xiàng)目整體架構(gòu),因?yàn)槭怯脩魪捻?yè)面構(gòu)建標(biāo)簽,因此從上到下分為幾個(gè)模塊??梢暬瘜?,給用戶提供頁(yè)面,選擇標(biāo)簽,然后接口層傳入標(biāo)簽,提供API服務(wù),將選擇標(biāo)簽傳入路由層,構(gòu)建索引服務(wù),在索引服務(wù)中會(huì)判斷是存客營(yíng)銷還是新客營(yíng)銷,頁(yè)面標(biāo)簽是求交還是求并;然后索引服務(wù)將標(biāo)簽部署于服務(wù)器的regionserver上,在存儲(chǔ)計(jì)算層,通過協(xié)處理器存儲(chǔ)查詢。通過標(biāo)簽和startkey構(gòu)建rowkey,然后查詢數(shù)據(jù),在BitMap中進(jìn)行求交、求并的操作,最后將結(jié)果返回給索引服務(wù),索引服務(wù)將結(jié)果返回前端頁(yè)面,用戶拿到的是匹配到的uid。存儲(chǔ)計(jì)算層還好,主要發(fā)費(fèi)在數(shù)據(jù)準(zhǔn)備階段,需要考慮很多東西。數(shù)據(jù)量大(十億級(jí)標(biāo)簽)并不能直接構(gòu)建BitMap,需要做這些用戶標(biāo)簽做MR生成倒排、uid分桶、gid轉(zhuǎn)id,通過bulkload生成BitMap索引,然后傳入regionserver里面,提供相關(guān)服務(wù)。
數(shù)據(jù)準(zhǔn)備層完成uid轉(zhuǎn)連續(xù)整數(shù)id,根據(jù)最大id分桶,標(biāo)簽分桶生成BitMap索引,并序列化后生成HFile,BulkloadBitMap索引。存儲(chǔ)計(jì)算層完成Hbase:存儲(chǔ)索引數(shù)據(jù),Hbasecop:分布式計(jì)算,RoaringBitmap:索引,布爾計(jì)算,求交求并。路由層實(shí)現(xiàn)
2024HBase in Practice-性能、監(jiān)控及問題解決.docx
-ISO17025(GBT27025)-實(shí)驗(yàn)室認(rèn)可質(zhì)量手冊(cè)-(第二部分).docx
(三級(jí))農(nóng)作物種植技術(shù)員技能鑒定考試復(fù)習(xí)題庫(kù)(含理論、實(shí)操).docx
國(guó)家開放大九游娛樂學(xué)2022春(202207)《2228物業(yè)信息管理》期末考試真題及答案-開放???docx
原創(chuàng)力文檔創(chuàng)建于2008年,本站為文檔C2C交易模式,即用戶上傳的文檔直接分享給其他用戶(可下載、閱讀),本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人所有。原創(chuàng)力文檔是網(wǎng)絡(luò)服務(wù)平臺(tái)方,若您的權(quán)利被侵害,請(qǐng)發(fā)鏈接和相關(guān)訴求至 電線) ,上傳者
本文由某某資訊網(wǎng)發(fā)布,不代表某某資訊網(wǎng)立場(chǎng),轉(zhuǎn)載聯(lián)系作者并注明出處:http://www.shenzhenaiai.com/marketing/1333.html