表名:user_visit_action(Hive表)
date:日期,代表這個(gè)用戶點(diǎn)擊行為是在哪一天發(fā)生的
user_id:代表這個(gè)點(diǎn)擊行為是哪一個(gè)用戶執(zhí)行的
session_id :唯一標(biāo)識(shí)了某個(gè)用戶的一個(gè)訪問(wèn)session
page_id :點(diǎn)擊了某些商品/品類蠢络,也可能是搜索了某個(gè)關(guān)鍵詞刽肠,然后進(jìn)入了某個(gè)頁(yè)面爸吮,頁(yè)面的id
action_time :這個(gè)點(diǎn)擊行為發(fā)生的時(shí)間點(diǎn)
search_keyword :如果用戶執(zhí)行的是一個(gè)搜索行為钙态,比如說(shuō)在網(wǎng)站/app中述呐,搜索了某個(gè)關(guān)鍵詞寺惫,然后會(huì)跳轉(zhuǎn)到商品列表頁(yè)面疹吃;搜索的關(guān)鍵詞
click_category_id :可能是在網(wǎng)站首頁(yè),點(diǎn)擊了某個(gè)品類(美食西雀、電子設(shè)備萨驶、電腦)
click_product_id :可能是在網(wǎng)站首頁(yè),或者是在商品列表頁(yè)艇肴,點(diǎn)擊了某個(gè)商品(比如呷哺呷哺火鍋XX路店3人套餐腔呜、iphone 6s)
order_category_ids :代表了可能將某些商品加入了購(gòu)物車,然后一次性對(duì)購(gòu)物車中的商品下了一個(gè)訂單再悼,這就代表了某次下單的行為中核畴,有哪些
商品品類,可能有6個(gè)商品冲九,但是就對(duì)應(yīng)了2個(gè)品類谤草,比如有3根火腿腸(食品品類),3個(gè)電池(日用品品類)
order_product_ids :某次下單莺奸,具體對(duì)哪些商品下的訂單
pay_category_ids :代表的是丑孩,對(duì)某個(gè)訂單,或者某幾個(gè)訂單灭贷,進(jìn)行了一次支付的行為温学,對(duì)應(yīng)了哪些品類
pay_product_ids:代表的,支付行為下氧腰,對(duì)應(yīng)的哪些具體的商品
user_visit_action表枫浙,其實(shí)就是放刨肃,比如說(shuō)網(wǎng)站,或者是app箩帚,每天的點(diǎn)擊流的數(shù)據(jù)真友。可以理解為紧帕,用戶對(duì)網(wǎng)站/app每點(diǎn)擊一下盔然,就會(huì)代表在這個(gè)表里面的一條數(shù)據(jù)。
這個(gè)表是嗜,其實(shí)就是愈案,我們先聲明一點(diǎn)。我們的這份基礎(chǔ)數(shù)據(jù)的結(jié)構(gòu)鹅搪,絕對(duì)是為了課程的需要站绪,進(jìn)行了某些改造和簡(jiǎn)化,真實(shí)的電商企業(yè)中丽柿,使用的基礎(chǔ)數(shù)據(jù)表的結(jié)構(gòu)恢准,絕對(duì)是至少是這個(gè)表的10倍復(fù)雜度以上。
還有一點(diǎn)甫题,這個(gè)表在任何企業(yè)中馁筐,都可能是不同的。為什么呢坠非?因?yàn)槲覀冎爸v解過(guò)日志采集流程敏沉。實(shí)際上,用戶在網(wǎng)頁(yè)上真正的執(zhí)行某些行為時(shí)炎码,那么會(huì)往服務(wù)器端發(fā)送日志盟迟。但是日志的格式絕對(duì)不是這個(gè)格式的哦。實(shí)際上辅肾,我們之前也提過(guò)队萤,企業(yè)中會(huì)有專門的大數(shù)據(jù)ETL開(kāi)發(fā)工程師轮锥,對(duì)原始的日志數(shù)據(jù)矫钓,開(kāi)發(fā)大量的ETL,對(duì)數(shù)據(jù)進(jìn)行各種轉(zhuǎn)換和抽取舍杜。然后可能會(huì)為了各種業(yè)務(wù)的需要新娜,形成大量的各種各樣的結(jié)構(gòu)的表,可能已經(jīng)進(jìn)行了處理或者是某些聚合的操作既绩。
所以說(shuō)概龄,這里要說(shuō)的是,這個(gè)表的結(jié)構(gòu)饲握,第一是為了課程我們?cè)斐鰜?lái)的私杜,簡(jiǎn)化了很多蚕键;第二,即使是我們課程造出來(lái)的衰粹,但是往往不同的企業(yè)锣光,這種表的結(jié)構(gòu),可能都是不一樣的铝耻。
所以誊爹,哪怕說(shuō),這個(gè)基礎(chǔ)數(shù)據(jù)的結(jié)構(gòu)瓢捉,不是企業(yè)中完全真實(shí)的频丘,但是。我可以跟大家保證泡态,這個(gè)是沒(méi)有任何問(wèn)題的搂漠。對(duì)與我們的學(xué)習(xí)來(lái)說(shuō)。首先某弦,雖然是做了簡(jiǎn)化的表結(jié)構(gòu)状答,但是也基本是按照真實(shí)企業(yè)中的表結(jié)構(gòu)來(lái)濃縮的;其次刀崖,在開(kāi)發(fā)我們的這種大數(shù)據(jù)平臺(tái)項(xiàng)目中惊科,其實(shí),使用這個(gè)表中提供的這些數(shù)據(jù)亮钦,也就足夠了馆截;最后,其實(shí)蜂莉,按不按公司里的來(lái)蜡娶,都不重要,因?yàn)槟銓W(xué)習(xí)完這套課程以后映穗,到任何企業(yè)中窖张,去做類似的項(xiàng)目,可能都不會(huì)碰到一樣的表蚁滋。所以說(shuō)宿接,我們這里,更多的是辕录,用一張簡(jiǎn)化后的睦霎,但是也相對(duì)貼近真實(shí)的表結(jié)構(gòu),方便我們課程的講解和學(xué)習(xí)走诞;然后呢副女,重點(diǎn)在于,理解課程中講解的真實(shí)的復(fù)雜的業(yè)務(wù)邏輯和Spark技術(shù)實(shí)現(xiàn)流程蚣旱,還有各種性能調(diào)優(yōu)碑幅、troubleshooting戴陡、數(shù)據(jù)傾斜解決等技術(shù)的掌握。
最后沟涨,在掌握了以上知識(shí)以后猜欺,出去,做任何大數(shù)據(jù)項(xiàng)目拷窜,其實(shí)只是表結(jié)果和業(yè)務(wù)變化了而已开皿,但是只要掌握了技術(shù),你都可以去做篮昧。
實(shí)際上赋荆,從這節(jié)課開(kāi)始,我們就已經(jīng)進(jìn)入了正規(guī)的大數(shù)據(jù)項(xiàng)目開(kāi)發(fā)流程懊昨。我們做任何大數(shù)據(jù)系統(tǒng)/平臺(tái)類的項(xiàng)目窄潭,首先第一步,就是要做數(shù)據(jù)調(diào)研酵颁。也就是分析平臺(tái)要基于的底層的基礎(chǔ)數(shù)據(jù)嫉你。分析表結(jié)構(gòu),弄清楚表之間的關(guān)系躏惋。表中的數(shù)據(jù)的更新粒度幽污,一個(gè)小時(shí)更新一次,還是一天更新一次簿姨。會(huì)不會(huì)有臟數(shù)據(jù)距误。每天什么時(shí)候數(shù)據(jù)能夠進(jìn)來(lái)。
表名:user_info(Hive表)
user_id:其實(shí)就是每一個(gè)用戶的唯一標(biāo)識(shí)扁位,通常是自增長(zhǎng)的Long類型准潭,BigInt類型
username:是每個(gè)用戶的登錄名
name:每個(gè)用戶自己的昵稱、或者是真實(shí)姓名
age:用戶的年齡
professional:用戶的職業(yè)
city:用戶所在的城市
user_info表域仇,實(shí)際上刑然,就是一張最普通的用戶基礎(chǔ)信息表;這張表里面暇务,其實(shí)就是放置了網(wǎng)站/app所有的注冊(cè)用戶的信息泼掠。那么我們這里也是對(duì)用戶信息表,進(jìn)行了一定程度的簡(jiǎn)化般卑。比如略去了手機(jī)號(hào)等這種數(shù)據(jù)武鲁。因?yàn)槲覀冞@個(gè)項(xiàng)目里不需要使用到某些數(shù)據(jù)爽雄。那么我們就保留一些最重要的數(shù)據(jù)蝠检,即可。
表名:task(MySQL表)
task_id:表的主鍵
task_name:任務(wù)名稱
create_time:創(chuàng)建時(shí)間
start_time:開(kāi)始運(yùn)行的時(shí)間
finish_time:結(jié)束運(yùn)行的時(shí)間
task_type:任務(wù)類型挚瘟,就是說(shuō)叹谁,在一套大數(shù)據(jù)平臺(tái)中饲梭,肯定會(huì)有各種不同類型的統(tǒng)計(jì)分析任務(wù),比如說(shuō)用戶訪問(wèn)session分析任務(wù)焰檩,頁(yè)面單跳轉(zhuǎn)化率統(tǒng)計(jì)任務(wù)憔涉;所以這個(gè)字段就標(biāo)識(shí)了每個(gè)任務(wù)的類型
task_status:任務(wù)狀態(tài),任務(wù)對(duì)應(yīng)的就是一次Spark作業(yè)的運(yùn)行析苫,這里就標(biāo)識(shí)了兜叨,Spark作業(yè)是新建,還沒(méi)運(yùn)行衩侥,還是正在運(yùn)行国旷,還是已經(jīng)運(yùn)行完畢
task_param:最最重要,用來(lái)使用JSON的格式茫死,來(lái)封裝用戶提交的任務(wù)對(duì)應(yīng)的特殊的篩選參數(shù)
task表跪但,其實(shí)是用來(lái)保存平臺(tái)的使用者,通過(guò)J2EE系統(tǒng)峦萎,提交的基于特定篩選參數(shù)的分析任務(wù)屡久,的信息,就會(huì)通過(guò)J2EE系統(tǒng)保存到task表中來(lái)爱榔。之所以使用MySQL表被环,是因?yàn)镴2EE系統(tǒng)是要實(shí)現(xiàn)快速的實(shí)時(shí)插入和查詢的。
說(shuō)明一下详幽,這里我們只會(huì)做Spark相關(guān)的東西蛤售,就是說(shuō)編寫Spark作業(yè)程序;spark-submit腳本妒潭;數(shù)據(jù)表的設(shè)計(jì)悴能;我們只會(huì)做,spark從MySQL表中讀取任務(wù)參數(shù)雳灾,執(zhí)行作業(yè)邏輯漠酿,持久化作業(yè)結(jié)果數(shù)據(jù)。
跟J2EE平臺(tái)相關(guān)的谎亩,我們是不會(huì)做的炒嘲。因?yàn)镴2EE本身并不是我們這套課程的重點(diǎn)(Spark)。另外匈庭,如果要做J2EE平臺(tái)夫凸,第一,大家的基礎(chǔ)不同阱持,不是每個(gè)做大數(shù)據(jù)的都會(huì)J2EE的夭拌;第二,要耗費(fèi)的時(shí)間太多,如果那樣鸽扁,可能會(huì)壓縮Spark的知識(shí)點(diǎn)和技術(shù)點(diǎn)蒜绽,寧愿花所有時(shí)間專注講解Spark,而不去講J2EE桶现;第三躲雅,如果你本身就是擅長(zhǎng)J2EE的人, 那么聽(tīng)完本套課程以后骡和,你自己都完全可以去做一個(gè)J2EE平臺(tái)出來(lái)相赁;第四,如果你本身就是只做Spark的大數(shù)據(jù)工程師慰于,那么即使不去關(guān)注J2EE層的實(shí)現(xiàn)噪生,也無(wú)所謂,專注精通做Spark即可东囚。
但是這一套架構(gòu)講解以后跺嗽,對(duì)于只會(huì)Spark的同學(xué),至少可以了解跟J2EE平臺(tái)配合起來(lái)的大數(shù)據(jù)平臺(tái)的架構(gòu)页藻,對(duì)于提高自己的眼界桨嫁,大有裨益