大數(shù)據(jù)技術(shù)原理與操作應(yīng)用 第10章 綜合項(xiàng)目案例_第1頁
大數(shù)據(jù)技術(shù)原理與操作應(yīng)用 第10章 綜合項(xiàng)目案例_第2頁
大數(shù)據(jù)技術(shù)原理與操作應(yīng)用 第10章 綜合項(xiàng)目案例_第3頁
大數(shù)據(jù)技術(shù)原理與操作應(yīng)用 第10章 綜合項(xiàng)目案例_第4頁
大數(shù)據(jù)技術(shù)原理與操作應(yīng)用 第10章 綜合項(xiàng)目案例_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第10章綜合項(xiàng)目案例·

模塊開發(fā)——數(shù)據(jù)分析·

模塊開發(fā)——數(shù)據(jù)導(dǎo)出·

模塊開發(fā)——日志分析系統(tǒng)報(bào)表展示·模塊開發(fā)——數(shù)據(jù)采集·

模塊開發(fā)——數(shù)據(jù)預(yù)處理·

模塊開發(fā)——數(shù)據(jù)倉庫開發(fā)

?學(xué)習(xí)目標(biāo)了解掌握熟悉熟悉了解系統(tǒng)架構(gòu)12熟悉系統(tǒng)環(huán)境搭建的步驟了解掌握熟悉掌握各個(gè)模塊的實(shí)現(xiàn)方法3章節(jié)概要本章通過Hadoop生態(tài)體系技術(shù)實(shí)現(xiàn)最高氣溫統(tǒng)計(jì)案例和電子商務(wù)離線數(shù)據(jù)統(tǒng)計(jì)案例,來幫助讀者在開發(fā)中學(xué)習(xí)大數(shù)據(jù)體系架構(gòu)的開發(fā)流程,以及利用現(xiàn)有技術(shù)解決實(shí)際生活中遇到的問題。本章核心是具體獨(dú)立分析數(shù)據(jù),并掌握網(wǎng)站數(shù)據(jù)分析系統(tǒng)的業(yè)務(wù)流程。利用MapReduce技術(shù)將數(shù)據(jù)提取出易于分析的數(shù)據(jù)結(jié)構(gòu),以及使用Hive完成數(shù)據(jù)分析,計(jì)算出需求結(jié)果的能力。

10.1最高氣溫統(tǒng)計(jì)案例系統(tǒng)背景介紹需從一組數(shù)據(jù)中統(tǒng)計(jì)每一年的每一個(gè)月中氣溫最高的前兩天輸入樣例:1951-07-0112:21:0245c1949-10-0214:01:0236c1951-07-0212:21:0246c1951-07-0312:21:0347c輸出樣例:1949-10-2-36案例設(shè)計(jì)思路(1)輸出結(jié)果時(shí)保證選取兩條氣溫最高的記錄

將相同的年月的記錄按照溫度降序排列,在最終獲取結(jié)果時(shí),前兩條記錄一定是氣溫最高的兩天。(2)獲得相同的年月的氣溫最高的記錄

對于Reduce端拉取的數(shù)據(jù),保證Reduce每次處理的數(shù)據(jù)為同一年同一個(gè)月份的數(shù)據(jù),將同年同月的數(shù)據(jù)排序(這個(gè)階段可由Group來處理),取前兩條記錄,即為該年該月氣溫最高224的前兩條記錄。案例設(shè)計(jì)思路(3)編碼關(guān)鍵問題解決

傳統(tǒng)的WordCount案例中的排序,是按照MapReduce程序默認(rèn)的字典排序規(guī)則進(jìn)行排序,但對于本案例,既要對日期進(jìn)行升序排列(默認(rèn)),又要對溫度作降序排列,采用如下的方法進(jìn)行編碼。可以考慮自定義比較方法來實(shí)現(xiàn)需求。自定義一個(gè)對象(JavaBean),包含年、月、日、溫度等四個(gè)屬性,將該對象的年份相同的一組數(shù)據(jù),支配一個(gè)Reduce進(jìn)行處理(自定義Partition方法,從數(shù)據(jù)中可以看出,一共是三個(gè)年份,可以考慮將Reduce的個(gè)數(shù)設(shè)置為“3”,用年屬性減去最小的那一年,將其值對“3”取余)。之后,再比較月份,月份相同,再比較溫度,溫度按照降序排列。通過以上分析,需要編寫以下幾個(gè)階段:①M(fèi)ap階段:負(fù)責(zé)將數(shù)據(jù)切分,對應(yīng)存入JavaBean中。將JavaBean傳入Partition階段。②Partition階段:繼承Partitioner,復(fù)寫getpartition()方法,指定相同年份的數(shù)據(jù)分到同一個(gè)Reduce中。這樣一個(gè)Reduce任務(wù)對應(yīng)輸出一個(gè)文件。③Sort階段:確保每個(gè)傳遞過來的JavaBean,確定排序規(guī)則:相同的年份,比較月份;月份相同,比較溫度。④Group階段:此階段為ShuffleReduce端的分組排序。⑤Reduce階段:統(tǒng)計(jì)每一年、每一個(gè)月、每一天的溫度,并選擇其中溫度最高的兩條記錄。其中,需要注意的是,在Sort和Group階段,必須復(fù)寫構(gòu)造方法,因?yàn)閰⒖荚创a可知,如果沒有復(fù)寫構(gòu)造方法,無法創(chuàng)建實(shí)例。編寫流程①編寫代碼,在根目錄“/”下創(chuàng)建名為“test”的文件。

②將“/var/log/demsg”文件上傳到HDFS的“/test/”下。

③獲取配置的所有信息。

④配置好開發(fā)環(huán)境。

⑤完成案例代碼并運(yùn)行成功。系統(tǒng)架構(gòu)設(shè)計(jì)大數(shù)據(jù)統(tǒng)計(jì)分析的架構(gòu)圖10.2電子商務(wù)離線數(shù)據(jù)統(tǒng)計(jì)案例

本案例通過模擬真實(shí)的電子商務(wù)業(yè)務(wù)的場景,應(yīng)用大數(shù)據(jù)組件和技術(shù)來處理日志數(shù)據(jù)和業(yè)務(wù)數(shù)據(jù),從而達(dá)到學(xué)習(xí)大數(shù)據(jù)離線批處理的步驟和流程。本案例的數(shù)據(jù)來源分為兩部分:一部分是用戶的網(wǎng)站日志,另一部分是電商平臺業(yè)務(wù)數(shù)據(jù)庫中的數(shù)據(jù)。結(jié)合這兩方面的數(shù)據(jù)通過大數(shù)據(jù)平臺來實(shí)現(xiàn)數(shù)據(jù)倉庫分層搭建,并進(jìn)行數(shù)據(jù)報(bào)表分析得到活躍、轉(zhuǎn)化率、GVM指標(biāo),最終將結(jié)果導(dǎo)入關(guān)系型數(shù)據(jù)庫,進(jìn)行可視化展示。案例設(shè)計(jì)思路流程①將電商用戶的網(wǎng)站日志數(shù)據(jù)采集到HDFS上存儲。②在電商業(yè)務(wù)里數(shù)據(jù)加載到訂單表和支付流水表。③將電商網(wǎng)站日志加載到Hive。④將②中的業(yè)務(wù)數(shù)據(jù)通過Sqoop加載進(jìn)Hive。⑤結(jié)合業(yè)務(wù)數(shù)據(jù)④和日志數(shù)據(jù)③分析得到結(jié)果存到數(shù)據(jù)報(bào)表,并進(jìn)一步分析得到活躍、轉(zhuǎn)化率、GVM指標(biāo)。⑥通過Sqoop將結(jié)果數(shù)據(jù)⑤導(dǎo)出到MySQL。⑦將⑥中的數(shù)據(jù)進(jìn)行可視化展示。案例設(shè)計(jì)思路流程圖為了便于將數(shù)據(jù)提取后進(jìn)行統(tǒng)計(jì),要把Hive中的數(shù)據(jù)分層次,按層次劃分歸類后的數(shù)據(jù)再進(jìn)行導(dǎo)出和可視化處理。數(shù)據(jù)分層次的情況如圖:

10.2模塊開發(fā)-數(shù)據(jù)采集使用Flume搭建日志采集系統(tǒng)

將電商用戶的網(wǎng)站日志數(shù)據(jù)采集到HDFS上存儲,需要用Flume采集系統(tǒng)需要在服務(wù)器上部署Agent節(jié)點(diǎn),從而對電商用戶行為日志數(shù)據(jù)進(jìn)行采集,并將日志文件匯集到HDFS中,搭建Flume的核心代碼如下:a1.sources=r1a1.sources.r1.type=taildira1.sources.r1.channels=c1a1.sources.r1.positionfile=/var/log/flume/taildir_position.jsona1.sources.r1.filegroups=f1f2a1.sources.r1.filegroups.f1=/logs/topic_event/.*log.*a1.sources.r1.filegroups.f2=/logs/topic_start/.*log.*

10.2模塊開發(fā)-數(shù)據(jù)采集日志信息說明通過Flume采集系統(tǒng)采集后的電商用戶行為日志數(shù)據(jù)將會匯總到HDFS上進(jìn)行保存,由于采集的日志數(shù)據(jù)內(nèi)容較多,并且樣式基本類似,這里選取兩條條進(jìn)行展示,樣例如下:啟動(dòng)日志{"action":"1","ba":"Huawei","detail":"","eamil":"8G1ZH4XL@199.com","en":"start","entry":"3","extend1":"","hw":"640*960","l":"pt","loading_time":"13","md":"Huawei-0","mid":"0","nw":"WIFI","open_ad_type":"1","t":"1559920269658","uid":"0"}

10.2模塊開發(fā)-數(shù)據(jù)采集日志信息說明"action":"1"狀態(tài)(成功或者失?。?ba":"Huawei"手機(jī)品牌"detail":""失敗信息"eamil":"8G1ZH4XL@199.com"郵箱"en":"start"日志類型"entry":"3"入口"extend1":""擴(kuò)展字段"hw":"640*960"屏幕寬高"l":"pt"系統(tǒng)語言"loading_time":"13"加載時(shí)間"md":"Huawei-0"手機(jī)型號"mid":"0設(shè)備唯一標(biāo)識"nw":"WIFI"網(wǎng)絡(luò)模式"open_ad_type":"1"廣告類型"t":"1559920269658"事件"uid":"0"}用戶標(biāo)識

10.2模塊開發(fā)-數(shù)據(jù)采集日志信息說明1560009799473|{"cm":{"uid":"4","t":"1559973929283","md":"Vivo-14","eamil":"QG5P5SUU@199.com","mid":"4","nw":"4G","l":"en","ba":"Vivo","hw":"640*1136"},"ap":"app","et":[{"ett":"1559985948932","en":"newsdetail","kv":{"entry":"2","goodsid":"0","news_staytime":"0","loading_time":"3","action":"3","showtype":"2"}}1560009799473|處理時(shí)間{"cm":公共字段{"uid":"4",用戶標(biāo)識"t":"1559973929283"客戶端日志產(chǎn)生的時(shí)間"md":"Vivo-14"手機(jī)型號"eamil":"QG5P5SUU@199.com"郵箱"mid":"4"設(shè)備唯一標(biāo)識"nw":"4G"手機(jī)網(wǎng)絡(luò)"l":"en"系統(tǒng)語言"ba":"Vivo"手機(jī)品牌"hw":"640*1136"}屏幕分辨率"ap":"app"數(shù)據(jù)來源"et":[{"ett":"1559985948932"事件產(chǎn)生時(shí)間"en":"newsdetail"事件名稱"kv":{"entry":"2"….事件詳細(xì)內(nèi)容事件日志對應(yīng)信息

10.2模塊開發(fā)-數(shù)據(jù)倉庫開發(fā)對應(yīng)流程中的第二項(xiàng),在電商業(yè)務(wù)里數(shù)據(jù)加載到訂單表和支付流水表;第三項(xiàng),把電商網(wǎng)站日志加載到Hive;將數(shù)據(jù)采集后,需要進(jìn)一步建立相應(yīng)的表格,把數(shù)據(jù)添加進(jìn)去,做更深層次的數(shù)據(jù)處理。日志分為兩部分,一個(gè)是啟動(dòng)日志,一個(gè)是事件日志。現(xiàn)在將啟動(dòng)日志加載到啟動(dòng)表中,用于生成用戶活躍度表。將事件日志加載到事件基礎(chǔ)明細(xì)表中,用于生成事件基礎(chǔ)表,進(jìn)而分化成為商品點(diǎn)擊表、收藏表、商品詳情表、評論表。Hive的數(shù)據(jù)分層,創(chuàng)建DWD層的啟動(dòng)表,

將啟動(dòng)日志中的數(shù)據(jù)導(dǎo)入到啟動(dòng)表中

10.2模塊開發(fā)-數(shù)據(jù)倉庫開發(fā)1)建表語句如下:0:jdbc:hive2://86:2181/>droptableifexistsbatch.dwd_start_log;CREATEEXTERNALTABLEbatch.dwd_start_log(`mid_id`stringCOMMENT'設(shè)備唯一標(biāo)識',`user_id`stringCOMMENT'用戶標(biāo)識',`lang`stringCOMMENT'系統(tǒng)語言',`model`stringCOMMENT'手機(jī)型號',`brand`stringCOMMENT'手機(jī)品牌',`email`stringCOMMENT'郵箱',`height_width`stringCOMMENT'屏幕寬高',`app_time`stringCOMMENT'客戶端日志產(chǎn)生時(shí)的時(shí)間',`network`stringCOMMENT'網(wǎng)絡(luò)模式',`entry`stringCOMMENT'入口',`open_ad_type`stringCOMMENT'開屏廣告類型',`action`stringCOMMENT'狀態(tài)',`loading_time`stringCOMMENT'加載時(shí)長',`detail`stringCOMMENT'失敗碼',`extend1`stringCOMMENT'擴(kuò)展字段')PARTITIONEDBY(dtstring)location'/warehouse/batch/dwd/dwd_start_log/';

10.2模塊開發(fā)-數(shù)據(jù)倉庫開發(fā)2)向啟動(dòng)表導(dǎo)入數(shù)據(jù):0:jdbc:hive2://86:2181/>insertoverwritetablebatch.dwd_start_logPARTITION(dt='2019-06-09')selectget_json_object(line,'$.mid')mid_id,get_json_object(line,'$.uid')user_id,get_json_object(line,'$.l')lang,get_json_object(line,'$.md')model,get_json_object(line,'$.ba')brand,get_json_object(line,'$.eamil')email,get_json_object(line,'$.hw')height_width,get_json_object(line,'$.t')app_time,get_json_object(line,'$.nw')network,get_json_object(line,'$.entry')entry,get_json_object(line,'$.open_ad_type')open_ad_type,get_json_object(line,'$.action')action,get_json_object(line,'$.loading_time')loading_time,get_json_object(line,'$.detail')detail,get_json_object(line,'$.extend1')extend1fromods_start_logwheredt='2019-06-09';

10.2模塊開發(fā)-數(shù)據(jù)倉庫開發(fā)創(chuàng)建DWD層事件日志基礎(chǔ)明細(xì)表,將事件日志導(dǎo)入到事件日志表中用和商品點(diǎn)擊表同樣的方法創(chuàng)建DWD層的詳情頁表,創(chuàng)建DWD評論表,創(chuàng)建DWD收藏表,并導(dǎo)入數(shù)據(jù)。創(chuàng)建DWS層的日活躍設(shè)備表創(chuàng)建DWS周活躍設(shè)備表。根據(jù)日用戶訪問明細(xì),獲得周用戶訪問明細(xì)。另一條線,由系統(tǒng)的業(yè)務(wù)數(shù)據(jù)生成業(yè)務(wù)ODS層訂單表。完全仿照業(yè)務(wù)數(shù)據(jù)庫中的表字段,一模一樣的創(chuàng)建ODS層對應(yīng)表,然后將數(shù)據(jù)導(dǎo)入。

10.2模塊開發(fā)-數(shù)據(jù)分析

對應(yīng)流程中的第五項(xiàng),將業(yè)務(wù)數(shù)據(jù)4和日志數(shù)據(jù)3分析得到結(jié)果存到數(shù)據(jù)報(bào)表,并進(jìn)一步分析得到活躍、轉(zhuǎn)化率、GVM指標(biāo)。

通過上述的用戶日活躍表,周活躍表和月活躍表計(jì)算出ADS層活躍用戶數(shù)表.1)建表語句如下:0:jdbc:hive2://86:2181/>droptableifexistsads_uv_count;createexternaltableads_uv_count(

`dt`stringCOMMENT'統(tǒng)計(jì)日期',

`day_count`bigintCOMMENT'當(dāng)日用戶數(shù)量',

`wk_count`bigintCOMMENT'當(dāng)周用戶數(shù)量',

`mn_count`bigintCOMMENT'當(dāng)月用戶數(shù)量',

`is_weekend`stringCOMMENT'Y,N是否是周末,用于得到本周最終結(jié)果',

`is_monthend`stringCOMMENT'Y,N是否是月末,用于得到本月最終結(jié)果')COMMENT'活躍用戶數(shù)'rowformatdelimitedfieldsterminatedby'\t'location'/warehouse/batch/ads/ads_uv_count/';

10.2模塊開發(fā)-數(shù)據(jù)分析

2)將表中導(dǎo)入數(shù)據(jù)0:jdbc:hive2://86:2181/>insertintotableads_uv_countselect'2019-06-09'dt,daycount.ct,wkcount.ct,mncount.ct,if(date_add(next_day('2019-06-09','MO'),-1)='2019-06-09','Y','N'),if(last_day('2019-06-09')='2019-06-09','Y','N')from(select'2019-06-09'dt,count(*)ctfromdws_uv_detail_daywheredt='2019-06-09')daycountjoin(select'2019-06-09'dt,count(*)ctfromdws_uv_detail_wkwherewk_dt=concat(date_add(next_day('2019-06-09','MO'),-7),'_',date_add(next_day('2019-06-09','MO'),-1)))wkcountondaycount.dt=wkcount.dtjoin(select'2019-06-09'dt,count(*)ctfromdws_uv_detail_mnwheremn=date_format('2019-06-09','yyyy-MM'))mncountondaycount.dt=mncount.dt;

10.2模塊開發(fā)-數(shù)據(jù)分析之后,按如下流程完成操作:(2) 通過上述的用戶日活躍表,周活躍表和月活躍表計(jì)算出業(yè)務(wù)DWS層創(chuàng)建用戶行為寬表(3)通過上述的用戶日活躍表,周活躍表和月活躍表計(jì)算出業(yè)務(wù)ADS層新增用戶占活躍用戶比率表。新增用戶占活躍用戶比率表.(4)通過上述的用戶日活躍表,周活躍表和月活躍表計(jì)算出業(yè)務(wù)ADS層用戶行為漏斗分析表(5)通過上述的用戶日活躍表,周活躍表和月活躍表計(jì)算出業(yè)務(wù)ADS層GMV成交總額表對應(yīng)流程中的第六項(xiàng)通過Sqoop將結(jié)果數(shù)據(jù)5導(dǎo)出到Mysql。使用Hive完成數(shù)據(jù)分析過程后,就要運(yùn)用Sqoop將Hive中的數(shù)據(jù)導(dǎo)出到Mysql中方便后續(xù)做可視化處理。

10.2模塊開發(fā)-數(shù)據(jù)導(dǎo)出(1)在MySQL中創(chuàng)建每日活躍統(tǒng)計(jì),創(chuàng)建ads_uv_count表。Usebatch;DROPTABLEIFEXISTS`ads_uv_count`;CREATETABLE`ads_uv_count`(`dt`varchar(255)DEFAULTNULLCOMMENT'統(tǒng)計(jì)日期',`day_count`bigint(200)DEFAULTNULLCOMMENT'當(dāng)日用戶數(shù)量',`wk_count`bigint(200)DEFAULTNULLCOMMENT'當(dāng)周用戶數(shù)量',`mn_count`bigint(200)DEFAULTNULLCOMMENT'當(dāng)月用戶數(shù)量',`is_weekend`varchar(200)CHARACTERSETutf8COLLATEutf8_general_ciDEFAULTNULLCOMMENT'Y,N是否是周末,用于得到本周最終結(jié)果',`is_monthend`varchar(200)CHARACTERSETutf8COLLATEutf8_general_ciDEFAULTNULLCOMMENT'Y,N是否是月末,用于得到本月最終結(jié)果')ENGINE=InnoDBCHARACTERSET=utf8COLLATE=utf8_general_ciCOMMENT='每日活躍用戶數(shù)量'ROW_FORMAT=Dynamic;對應(yīng)流程中的第六項(xiàng)通過Sqoop將結(jié)果數(shù)據(jù)5導(dǎo)出到Mysql。使用Hive完成數(shù)據(jù)分析過程后,就要運(yùn)用Sqoop將Hive中的數(shù)據(jù)導(dǎo)出到Mysql中方便后續(xù)做可視化處理。

10.2模塊開發(fā)-數(shù)據(jù)導(dǎo)出(2)在MySQL中創(chuàng)建每日用戶行為轉(zhuǎn)化率統(tǒng)計(jì)表,創(chuàng)建ads_user_action_convert_day表。Usebatch;DROPTABLEIFEXISTS`ads_user_action_convert_day`;CREATETABLE`ads_user_action_convert_day`(`dt`varchar(200)DEFAULTNULLCOMMENT'統(tǒng)計(jì)日期',`total_visitor_m_count`bigint(20)DEFAULTNULLCOMMENT'總訪問人數(shù)',`order_u_count`bigint(20)DEFAULTNULLCOMMENT'下單人數(shù)',`visitor2order_convert_ratio`decimal(10,2)DEFAULTNULLCOMMENT'訪問到下單轉(zhuǎn)化率',`payment_u_count`bigint(20)DEFAULTNULLCOMMENT'支付人數(shù)',`order2payment_convert_ratio`decimal(10,2)DEFAULTNULLCOMMENT'訪問到支付的轉(zhuǎn)化率')ENGINE=InnoDBCHARACTERSET=utf8COLLATE=utf8_general_ciCOMMENT='每日用戶行為轉(zhuǎn)化率統(tǒng)計(jì)'ROW_FORMAT=Dynamic;對應(yīng)流程中的第六項(xiàng)通過Sqoop將結(jié)果數(shù)據(jù)5導(dǎo)出到Mysql。使用Hive完成數(shù)據(jù)分析過程后,就要運(yùn)用Sqoop將Hive中的數(shù)據(jù)導(dǎo)出到Mysql中方便后續(xù)做

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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

提交評論