014.用戶訪問session分析-技術(shù)方案設(shè)計(jì)

1、按條件篩選session
2、聚合統(tǒng)計(jì):統(tǒng)計(jì)出符合條件的session中沾谜,訪問時(shí)長在1s-3s向胡、4s-6s、7s-9s、10s-30s、30s-60s、1m-3m褒侧、3m-10m、10m-30m谊迄、30m以上各個(gè)范圍內(nèi)的session占比闷供;訪問步長在1-3、4-6统诺、7-9歪脏、10-30、30-60粮呢、60以上各個(gè)范圍內(nèi)的session占比
3婿失、在符合條件的session中,按照時(shí)間比例隨機(jī)抽取1000個(gè)session
4啄寡、在符合條件的session中豪硅,獲取點(diǎn)擊、下單和支付數(shù)量排名前10的品類
5挺物、對于排名前10的品類懒浮,分別獲取其點(diǎn)擊次數(shù)排名前10的session

說在前面的話,本節(jié)課是我們正規(guī)企業(yè)級大數(shù)據(jù)項(xiàng)目開發(fā)流程的第三個(gè)步驟识藤。就是說嵌溢,在調(diào)研完了基礎(chǔ)數(shù)據(jù)眯牧、分析完了需求之后蹋岩,就需要針對我們手頭上有的基礎(chǔ)數(shù)據(jù)和PM提出來的需求赖草,來進(jìn)行技術(shù)方案的設(shè)計(jì)。所謂技術(shù)方案剪个,指的就是秧骑,基于現(xiàn)有的數(shù)據(jù),針對提出的需求扣囊,實(shí)現(xiàn)所有需求的整個(gè)技術(shù)架構(gòu)乎折、關(guān)鍵的技術(shù)點(diǎn)等。在這個(gè)過程中侵歇,需要考慮到實(shí)現(xiàn)所有需求骂澄,需要使用以及可能涉及到的技術(shù)點(diǎn)。另外惕虑,在這個(gè)過程中坟冲,有時(shí)也會涉及到技術(shù)的選項(xiàng)。比如溃蔫,如果說健提,我們的Spark程序在中間,需要對某個(gè)RDD的數(shù)據(jù)寫入外部的緩存伟叛,以便于后續(xù)的算子可以直接通過緩存讀取數(shù)據(jù)私痹。那么就需要對緩存進(jìn)行技術(shù)選項(xiàng),redis统刮、memcached紊遵、spark tachyon。

說明一下侥蒙,技術(shù)架構(gòu)暗膜,其實(shí)在之前,介紹這個(gè)基礎(chǔ)數(shù)據(jù)的時(shí)候辉哥,已經(jīng)講解了桦山。前端+J2EE+Spark+MySQL。

實(shí)現(xiàn)需求需要使用的以及涉及到的技術(shù)點(diǎn)醋旦,和技術(shù)實(shí)現(xiàn)思路恒水,是我們這里的重點(diǎn)。也就是說饲齐,實(shí)現(xiàn)上述幾個(gè)需求钉凌,你的技術(shù)實(shí)現(xiàn)的思路,以及在思路中捂人,可能使用到的技術(shù)的要點(diǎn)御雕。

1矢沿、按條件篩選session

這里首先提出第一個(gè)問題,你要按條件篩選session酸纲,但是這個(gè)篩選的粒度是不同的捣鲸,比如說搜索詞、訪問時(shí)間闽坡,那么這個(gè)都是session粒度的栽惶,甚至是action粒度的;那么還有疾嗅,就是針對用戶的基礎(chǔ)信息進(jìn)行篩選外厂,年齡、性別代承、職業(yè)汁蝶。。论悴;所以說篩選粒度是不統(tǒng)一的掖棉。

第二個(gè)問題,就是說意荤,我們的每天的用戶訪問數(shù)據(jù)量是很大的啊片,因?yàn)閡ser_visit_action這個(gè)表,一行就代表了用戶的一個(gè)行為玖像,比如點(diǎn)擊或者搜索紫谷;那么在國內(nèi)一個(gè)大的電商企業(yè)里面,如果每天的活躍用戶數(shù)量在千萬級別的話捐寥。那么可以告訴大家笤昨,這個(gè)user_visit_action表,每天的數(shù)據(jù)量大概在至少5億以上握恳,在10億左右瞒窒。

那么針對這個(gè)篩選粒度不統(tǒng)一的問題,以及數(shù)據(jù)量巨大(10億/day)乡洼,可能會有兩個(gè)問題崇裁;首先第一個(gè),就是束昵,如果不統(tǒng)一篩選粒度的話拔稳,那么就必須得對所有的數(shù)據(jù)進(jìn)行全量的掃描;第二個(gè)锹雏,就是全量掃描的話巴比,量實(shí)在太大了,一天如果在10億左右,那么10天呢(100億)轻绞,100呢采记,1000億。量太大的話政勃,會導(dǎo)致Spark作業(yè)的運(yùn)行速度大幅度降低唧龄。極大的影響平臺使用者的用戶體驗(yàn)。

所以為了解決這個(gè)問題稼病,那么我們選擇在這里选侨,對原始的數(shù)據(jù),進(jìn)行聚合然走,什么粒度的聚合呢?session粒度的聚合戏挡。也就是說芍瑞,用一些最基本的篩選條件,比如時(shí)間范圍褐墅,從hive表中提取數(shù)據(jù)拆檬,然后呢,按照session_id這個(gè)字段進(jìn)行聚合妥凳,那么聚合后的一條記錄竟贯,就是一個(gè)用戶的某個(gè)session在指定時(shí)間內(nèi)的訪問的記錄,比如搜索過的所有的關(guān)鍵詞逝钥、點(diǎn)擊過的所有的品類id屑那、session對應(yīng)的userid關(guān)聯(lián)的用戶的基礎(chǔ)信息。

聚合過后艘款,針對session粒度的數(shù)據(jù)持际,按照使用者指定的篩選條件,進(jìn)行數(shù)據(jù)的篩選哗咆。篩選出來符合條件的用session粒度的數(shù)據(jù)蜘欲。其實(shí)就是我們想要的那些session了。

2晌柬、聚合統(tǒng)計(jì)

如果要做這個(gè)事情姥份,那么首先要明確,我們的spark作業(yè)是分布式的年碘。所以也就是說澈歉,每個(gè)spark task在執(zhí)行我們的統(tǒng)計(jì)邏輯的時(shí)候,可能就需要對一個(gè)全局的變量盛泡,進(jìn)行累加操作闷祥。比如代表訪問時(shí)長在1s-3s的session數(shù)量,初始是0,然后呢分布式處理所有的session凯砍,判斷每個(gè)session的訪問時(shí)長箱硕,如果是1s-3s內(nèi)的話,那么就給1s-3s內(nèi)的session計(jì)數(shù)器悟衩,累加1剧罩。

那么在spark中,要實(shí)現(xiàn)分布式安全的累加操作座泳,基本上只有一個(gè)最好的選擇惠昔,就是Accumulator變量。但是挑势,問題又來了镇防,如果是基礎(chǔ)的Accumulator變量,那么可能需要將近20個(gè)Accumulator變量潮饱,1s-3s来氧、4s-6s。香拉。啦扬。。凫碌;但是這樣的話扑毡,就會導(dǎo)致代碼中充斥了大量的Accumulator變量,導(dǎo)致維護(hù)變得更加復(fù)雜盛险,在修改代碼的時(shí)候瞄摊,很可能會導(dǎo)致錯(cuò)誤。比如說判斷出一個(gè)session訪問時(shí)長在4s-6s枉层,但是代碼中不小心寫了一個(gè)bug(由于Accumulator太多了)泉褐,比如說,更新了1s-3s的范圍的Accumulator變量鸟蜡。導(dǎo)致統(tǒng)計(jì)出錯(cuò)膜赃。

所以,對于這個(gè)情況揉忘,那么我們就可以使用自定義Accumulator的技術(shù)跳座,來實(shí)現(xiàn)復(fù)雜的分布式計(jì)算。也就是說泣矛,就用一個(gè)Accumulator疲眷,來計(jì)算所有的指標(biāo)。

3您朽、在符合條件的session中狂丝,按照時(shí)間比例隨機(jī)抽取1000個(gè)session

這個(gè)呢换淆,需求上已經(jīng)明確了。那么剩下的就是具體的實(shí)現(xiàn)了几颜。具體的實(shí)現(xiàn)這里不多說倍试,技術(shù)上來說,就是要綜合運(yùn)用Spark的countByKey蛋哭、groupByKey县习、mapToPair等算子,來開發(fā)一個(gè)復(fù)雜的按時(shí)間比例隨機(jī)均勻采樣抽取的算法谆趾。(大數(shù)據(jù)算法)

4躁愿、在符合條件的session中,獲取點(diǎn)擊沪蓬、下單和支付數(shù)量排名前10的品類

這里的話呢彤钟,需要對每個(gè)品類的點(diǎn)擊、下單和支付的數(shù)量都進(jìn)行計(jì)算怜跑。然后呢样勃,使用Spark的自定義Key二次排序算法的技術(shù),來實(shí)現(xiàn)所有品類性芬,按照三個(gè)字段,點(diǎn)擊數(shù)量剧防、下單數(shù)量植锉、支付數(shù)量依次進(jìn)行排序,首先比較點(diǎn)擊數(shù)量峭拘,如果相同的話俊庇,那么比較下單數(shù)量,如果還是相同鸡挠,那么比較支付數(shù)量辉饱。

5、對于排名前10的品類拣展,分別獲取其點(diǎn)擊次數(shù)排名前10的session

這個(gè)需求彭沼,需要使用Spark的分組取TopN的算法來進(jìn)行實(shí)現(xiàn)。也就是說對排名前10的品類對應(yīng)的數(shù)據(jù)备埃,按照品類id進(jìn)行分組姓惑,然后求出每組點(diǎn)擊數(shù)量排名前10的session。

最后總結(jié)一下按脚,通過學(xué)習(xí)這個(gè)模塊于毙,通過業(yè)務(wù)功能的開發(fā),還不說性能調(diào)優(yōu)辅搬、troubleshooting唯沮、數(shù)據(jù)傾斜方面的東西。僅僅是業(yè)務(wù)功能的開發(fā),可以掌握到的技術(shù)點(diǎn):

1介蛉、通過底層數(shù)據(jù)聚合萌庆,來減少spark作業(yè)處理數(shù)據(jù)量,從而提升spark作業(yè)的性能(從根本上提升spark性能的技巧)
2甘耿、自定義Accumulator實(shí)現(xiàn)復(fù)雜分布式計(jì)算的技術(shù)
3踊兜、Spark按時(shí)間比例隨機(jī)抽取算法
4、Spark自定義key二次排序技術(shù)
5佳恬、Spark分組取TopN算法
6捏境、通過Spark的各種功能和技術(shù)點(diǎn),進(jìn)行各種聚合毁葱、采樣垫言、排序、取TopN業(yè)務(wù)的實(shí)現(xiàn)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末倾剿,一起剝皮案震驚了整個(gè)濱河市筷频,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌前痘,老刑警劉巖凛捏,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異芹缔,居然都是意外死亡坯癣,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進(jìn)店門最欠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來示罗,“玉大人,你說我怎么就攤上這事芝硬⊙恋悖” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵拌阴,是天一觀的道長绍绘。 經(jīng)常有香客問我,道長皮官,這世上最難降的妖魔是什么脯倒? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮捺氢,結(jié)果婚禮上藻丢,老公的妹妹穿的比我還像新娘。我一直安慰自己摄乒,他們只是感情好悠反,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布残黑。 她就那樣靜靜地躺著,像睡著了一般斋否。 火紅的嫁衣襯著肌膚如雪梨水。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天茵臭,我揣著相機(jī)與錄音疫诽,去河邊找鬼。 笑死旦委,一個(gè)胖子當(dāng)著我的面吹牛奇徒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播缨硝,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼摩钙,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了查辩?” 一聲冷哼從身側(cè)響起胖笛,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宜岛,沒想到半個(gè)月后长踊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡萍倡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年之斯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片遣铝。...
    茶點(diǎn)故事閱讀 38,577評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖莉擒,靈堂內(nèi)的尸體忽然破棺而出酿炸,到底是詐尸還是另有隱情,我是刑警寧澤涨冀,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布填硕,位于F島的核電站,受9級特大地震影響鹿鳖,放射性物質(zhì)發(fā)生泄漏扁眯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一翅帜、第九天 我趴在偏房一處隱蔽的房頂上張望姻檀。 院中可真熱鬧,春花似錦涝滴、人聲如沸绣版。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽杂抽。三九已至诈唬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間缩麸,已是汗流浹背铸磅。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留杭朱,地道東北人阅仔。 一個(gè)月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像痕檬,于是被迫代替她去往敵國和親霎槐。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評論 2 348