flume+hdfs+spark sql+Echarts實現(xiàn)用戶行為分析(5分鐘頻次)

背景

良品數(shù)據(jù)分析系統(tǒng)是為了滿足運營實時監(jiān)控用戶瀏覽行為陵叽、點擊行為狞尔、以及觀測用戶端日活的一套數(shù)據(jù)分析系統(tǒng)。這是他的前期的功能定位巩掺,后期會擴展他的監(jiān)控范圍偏序,比如自營外賣的用戶加購行為,用戶的下單行為胖替,用戶的支付行為研儒,以及整個外賣系統(tǒng)銷售實時統(tǒng)計監(jiān)控。隨著系統(tǒng)的穩(wěn)定后期可以承擔(dān)商品精準推薦刊殉,精準營銷殉摔,以及良品app的用戶行為分析以及配套的各種營銷手段,讓良品的多套C端系統(tǒng)從此有了自己的對外了解用戶记焊,感知用戶逸月,發(fā)現(xiàn)用戶,吸引用戶的大腦和眼睛遍膜。

數(shù)據(jù)采集系統(tǒng):是良品外賣團隊經(jīng)過2個月的技術(shù)沉淀碗硬,孵化出來的數(shù)據(jù)分析系統(tǒng)。從2018年12月底至2019年2月25日瓢颅,外賣團隊從對大數(shù)據(jù)一無所知恩尾,到后來初步實現(xiàn),經(jīng)歷了學(xué)習(xí)挽懦,探索翰意,研究,搭建幾個重要的階段信柿,每一個階段雖然走的很艱難冀偶,但總有階段性的成果出現(xiàn),從而不斷激勵我們一直向前渔嚷。經(jīng)過多套方案的預(yù)演最終確定了一套比較適合良品業(yè)務(wù)發(fā)展的數(shù)據(jù)分析系統(tǒng)进鸠。雖然良品內(nèi)部已經(jīng)有BI團隊做大數(shù)據(jù)統(tǒng)計的部分,但是他們更多的是做離線非實時的銷售報表的提供層面上形病,并不能提供實時的分析服務(wù)客年。而我們這套數(shù)據(jù)分析系統(tǒng),與此最大的差別就是實時的計算結(jié)果展示漠吻,讓運營能夠根據(jù)監(jiān)控到的結(jié)果及時做出反映量瓜,從而提升營運效率,及時抓住稍縱即逝的營銷時機途乃,讓營銷效果最大化榔至。


該系統(tǒng)分為多個模塊組成,數(shù)據(jù)采集欺劳、數(shù)據(jù)存儲唧取、數(shù)據(jù)清洗、分析計算划提、結(jié)果數(shù)據(jù)存儲枫弟、數(shù)據(jù)可視化。

接下來我們就一個一個模塊來介紹:

一鹏往、架構(gòu)

第一淡诗、數(shù)據(jù)采集、存儲

數(shù)據(jù)采集我們用了take-out-daq服務(wù)來做用戶瀏覽行為的日志記錄伊履,需要前端配合做用戶瀏覽行為和點擊行為的動作監(jiān)控韩容,并且把用戶的每一個動作都以固定的接口字段,上送到daq這個服務(wù)中唐瀑。daq的日志按照一定時間間隔來不斷歸檔數(shù)據(jù)到一個被flume監(jiān)控的文件夾里群凶。我們把這個文件夾定義為/usr/logs/flume。該文件夾下如果有新文件產(chǎn)生哄辣,就會被flume監(jiān)控到请梢,并且會把該文件數(shù)據(jù)實時收集到按照一定的日期格式沉淀到hdfs中。

這一個過程中力穗,我們牽涉到兩塊功能毅弧,第一是daq的日志歸檔功能,使用的logback.xml特性当窗。另外一個就是flume够坐,是apache開源的一套頂級項目,是專門做日志收集穩(wěn)定的開源框架崖面。

我們這里選擇flume的日志收集策略是兩個agent相互配合元咙,第一個agent負責(zé)監(jiān)控flume的日志歸檔目錄/usr/logs/flume,并把數(shù)據(jù)包裝成為一個遠程的事件avrosink嘶朱。第二個agent負責(zé)監(jiān)控第一個遠程的avrosink傳遞過來的事件蛾坯,并且用avrosource來接受此事件,并且通過memroychannel來整合疏遏,最后通過hdfsSink下沉到hdfs中脉课。(關(guān)于flume的知識可參看:flume.apache.org官網(wǎng))

對應(yīng)的flume部署框架圖:


第二、數(shù)據(jù)清洗财异、計算分析

這里選擇的是spark sql作為分布式計算框架倘零,資源調(diào)度使用的yarn,這些服務(wù)都是跑在HDFS之上的戳寸。真正的計算邏輯是我們使用spark sql的語法來編寫的一套計算組件呈驶,以jar包的形式spark-submit到運行在yarn之上的spark服務(wù)上的。運算時疫鹊,會從hdfs中獲取響應(yīng)的數(shù)據(jù)袖瞻,然后把計算結(jié)果沉淀到關(guān)系性數(shù)據(jù)庫中司致。



第三步:數(shù)據(jù)可視化

數(shù)據(jù)可視化顧名思義就是把大數(shù)據(jù)計算完的結(jié)果,結(jié)合業(yè)務(wù)關(guān)注數(shù)據(jù)維度聋迎,以圖表的形式直觀地展示數(shù)據(jù)的一種方式脂矫,也是大數(shù)據(jù)分析的最后一個步驟。目前流行的可視化框架有很多霉晕,有阿里開源的dataV也有百度開源的Echarts庭再,我們目前使用的Echarts。它的學(xué)習(xí)和開發(fā)成本很低牺堰,具體文檔可以參看https://echarts.baidu.com/

數(shù)據(jù)可視化的功能放在了take-out-control中來實現(xiàn)拄轻,目前使用Echarts來做數(shù)據(jù)圖表展示,使用heatmap來做頁面點擊熱力圖伟葫。

服務(wù)環(huán)境部署

服務(wù)器列表及部署目錄

測試環(huán)境hdfs瀏覽目錄:http://10.101.x.x:50070/

服務(wù)關(guān)系ip部署目錄服務(wù)名所屬業(yè)務(wù)影響環(huán)境對應(yīng)配置文件及目錄

test-flume-存儲端10.101.x.x/usr/apache-flume-1.6.0-cdh5.7.0-bin

啟動腳本:

nohup ./flume-ng agent --conf $FLUME_HOME/conf --conf-file $FLUME_HOME/conf/test-avro-memory-hdfs.conf --name test-avro-memory-hdfs -Dflume.root.logger=INFO,console &

flume日志接受并寫向3的hdfs恨搓,開放端口是44444測試環(huán)境/usr/apache-flume-1.6.0-cdh5.7.0-bin/conf/test-avro-memory-hdfs.conf

10.101.x.x/usr/hadoop-2.6.0-cdh5.7.0hadoop、yarn數(shù)據(jù)存儲測試環(huán)境/usr/hadoop-2.6.0-cdh5.7.0/etc/hadoop/spark-env.sh

10.101.x.x/usr/spark-2.1.1-bin-hadoop2.6spark數(shù)據(jù)計算測試環(huán)境/usr/spark-2.1.1-bin-hadoop2.6/conf/

test-flume-收集端10.101.x.x2/usr/local/apache-flume-1.6.0-cdh5.7.0-bin

啟動腳本:

nohup ./flume-ng agent --conf $FLUME_HOME/conf --conf-file $FLUME_HOME/conf/spooldir-memory-avro.conf --name?spooldir-memory-avro-Dflume.root.logger=INFO,console &

flume日志收集并寫向129的flume扒俯,目標端口44444測試環(huán)境/usr/local/apache-flume-1.6.0-cdh5.7.0-bin/conf/spooldir-memory-avro.conf

prod-flume-收集端172.16.x.x/home/app/apache-flume-1.6.0-cdh5.7.0-bin

啟動腳本:

nohup ./flume-ng agent --conf $FLUME_HOME/conf --conf-file $FLUME_HOME/conf/spooldir-memory-avro.conf --name?spooldir-memory-avro-Dflume.root.logger=INFO,console &

環(huán)境變量:/home/app/base_profile (里面指定了jdk的安裝目錄和flume的安裝目錄)

注意:

該flume監(jiān)控的目錄是/usr/local/daq.xxx.com/logs/flumes/奶卓,這個目錄是利用logback的歸檔功能,自動把日志歸集到這個目錄撼玄。一旦文件被歸集進來夺姑,此時flume就會立刻監(jiān)控到,并且立即傳輸文件里的數(shù)據(jù)到目標flume的55555端口掌猛,當flume監(jiān)控的文件數(shù)據(jù)成功傳輸?shù)?5555端口并下沉到hdfs時盏浙,會自動清理掉/usr/local/daq.xxx.com/logs/flumes/目錄下的.COMPLETED后綴的文件

flume日志收集并寫向10.16.x.x的flume,目標端口55555生產(chǎn)環(huán)境/home/app/apache-flume-1.6.0-cdh5.7.0-bin/conf/spooldir-memory-avro.conf

prod-flume-存儲端10.16.x.x(大數(shù)據(jù)部門hdfs集群主節(jié)點)/home/hadoop/apache-flume-1.6.0-cdh5.7.0-bin

啟動腳本:

nohup ./flume-ng agent --conf $FLUME_HOME/conf --conf-file $FLUME_HOME/conf/prod-avro-memory-hdfs.conf --name prod-avro-memory-hdfs -Dflume.root.logger=INFO,console?&

啟動成功檢查:

用ps -ef|grep flume荔茬,并且觀察/usr/apache-flume-1.6.0-cdh5.7.0-bin/bin下的nohup.out的日志文件即可废膘。

flume日志接受并寫向(10.16.6.x至10.16.6.x7)的hdfs集群,開放端口是55555生產(chǎn)環(huán)境/home/hadoop/apache-flume-1.6.0-cdh5.7.0-bin/conf/prod-avro-memory-hdfs.conf

數(shù)據(jù)清洗服務(wù)10.16.x.x2(使用jdk1.8環(huán)境)計算服務(wù)的實現(xiàn)程序慕蔚,這是jar包是我們開發(fā)人員編寫丐黄,編譯、打包上傳到上面去的

/home/hadoop/waimai/selfjars/execData-1.1-SNAPSHOT.jar

spark on yarn(集群模式)從(10.16.x.x至10.16.x.x7)對應(yīng)的hdfs數(shù)據(jù)倉庫中獲取埋點數(shù)據(jù)孔飒,并作計算灌闺,然后將計算結(jié)果插入到外賣生產(chǎn)庫的結(jié)果展示表里生產(chǎn)環(huán)境1、/home/hadoop/waimai/selfshells/sparkDataAutoOption.sh計算服務(wù)啟動腳本坏瞄,無參則計算當前小時的數(shù)據(jù)桂对。

2、/home/hadoop/waimai/selfshells/sparkDataAutoOption.sh 19-03-20 鸠匀,如果傳遞參數(shù)為19-03-20蕉斜,那么他就會計算19年3月20日全天的數(shù)據(jù)

二、服務(wù)

2.1 服務(wù)器:

10.101.3.x

生產(chǎn)HDFS集群:

10.16.x.x Bingo-0x-01 hamaster?(yarn master)

10.16.x.x1 Bingo-0x-02 hanode1 (ha2ndnamenode )

10.16.x.x2 Bingo-0x-03 hanode2?

10.16.x.x3 Bingo-0x-04 hanode3?

10.16.x.x4 Bingo-0x-05 hanode4

10.16.x.x5 Bingo-0x-06 hanode5?

10.16.x.x6 Bingo-0x-07 hanode6?

10.16.x.x7 Bingo-0x-08 hanode7

10.16.x.x8 Bingo-0x-09 hanode8

2.2 執(zhí)行數(shù)據(jù)清洗方法

1.按時刻進行執(zhí)行:在dev環(huán)境任意目錄執(zhí)行命令 sparkDataAutoOption.sh?清洗當前時刻的數(shù)據(jù)

2.自定義日期進行清洗,在dev任意目錄執(zhí)行命令?sparkDataAutoOption.sh 19-03-07 (日期格式:XX(年)-XX(月)-XX(日))?定點清洗

2.4 腳本環(huán)境:

測試環(huán)境/開發(fā)環(huán)境:腳本目錄:/usr/local/shell/bin/sparkDataAutoOption_test.sh :測試執(zhí)行腳本

測試環(huán)境/開發(fā)環(huán)境:項目路徑:/usr/bigdata/spark/test/execData-1.1-SNAPSHOT.jar

三、注意

3.1 生產(chǎn)環(huán)境

生產(chǎn)環(huán)境hdfs集群:hdfs://hamaster:9000該地址僅供程序之間數(shù)據(jù)傳輸使用宅此,不能直接訪問

hdfs數(shù)據(jù)查看地址:http://bingo-0x-x:50070該地址是供開發(fā)者机错,便捷的查看目前hdfs中的數(shù)據(jù)存儲情況和數(shù)據(jù)存儲效果,以及下載數(shù)據(jù)使用父腕。效果見下圖


采集數(shù)據(jù)存儲目錄:/user/xcx/prod

3.2自動化

使用阿里開源的dataX來管理我們數(shù)據(jù)清洗腳本的任務(wù)調(diào)度毡熏,決定開啟或關(guān)閉,以及開啟的頻率侣诵,以及與其他清洗任務(wù)的關(guān)聯(lián)關(guān)系。

我們清洗pv數(shù)據(jù)的任務(wù)目前每小時執(zhí)行一次狱窘。

這里注意用spark_submit任務(wù)時需要制定num和queue

#####begin#####

DAY=$1

echo "=======執(zhí)行spark -submit 清洗${DAY}的用戶點擊熱門商品指標數(shù)據(jù)======="

spark-submit --class com.xxx.HotClickProdAnalysis --master yarn --driver-memory 2g --executor-memory 2g --executor-cores 1 --queue flinkqueue /home/hadoop/waimai/selfjars/execData-1.1-SNAPSHOT.jar ${DAY}

echo "=======執(zhí)行用戶點擊熱門商品數(shù)據(jù)清洗完成========"

#####end######

如果想查看任務(wù)執(zhí)行的過程日志杜顺,有兩種方式:第一、可以點擊"運行日志"按鈕即可查看蘸炸。第二躬络、可以在yarn集群上查看任務(wù)執(zhí)行的情況,地址:http://hamaster:8088/cluster

如圖:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末搭儒,一起剝皮案震驚了整個濱河市穷当,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌淹禾,老刑警劉巖馁菜,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異铃岔,居然都是意外死亡汪疮,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門毁习,熙熙樓的掌柜王于貴愁眉苦臉地迎上來智嚷,“玉大人,你說我怎么就攤上這事纺且≌档溃” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵载碌,是天一觀的道長猜嘱。 經(jīng)常有香客問我,道長恐仑,這世上最難降的妖魔是什么泉坐? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮裳仆,結(jié)果婚禮上腕让,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好纯丸,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布偏形。 她就那樣靜靜地躺著,像睡著了一般觉鼻。 火紅的嫁衣襯著肌膚如雪俊扭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天坠陈,我揣著相機與錄音萨惑,去河邊找鬼。 笑死仇矾,一個胖子當著我的面吹牛庸蔼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播贮匕,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼姐仅,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了刻盐?” 一聲冷哼從身側(cè)響起掏膏,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎敦锌,沒想到半個月后馒疹,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡供屉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年行冰,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伶丐。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡悼做,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出哗魂,到底是詐尸還是另有隱情肛走,我是刑警寧澤,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布录别,位于F島的核電站朽色,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏组题。R本人自食惡果不足惜葫男,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望崔列。 院中可真熱鬧梢褐,春花似錦旺遮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至鱼响,卻和暖如春鸣剪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背丈积。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工筐骇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人江滨。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓拥褂,卻偏偏與公主長得像,于是被迫代替她去往敵國和親牙寞。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 面對以上的問題莫秆,我們?nèi)绾螌⑦@些日志移動到hdfs集群上尼间雀??镊屎?惹挟? 第一種方案:使用shell腳本cp 文件,然后通...
    機靈鬼鬼閱讀 1,388評論 1 1
  • 博客原文 翻譯作品缝驳,水平有限连锯,如有錯誤,煩請留言指正用狱。原文請見 官網(wǎng)英文文檔 引言 概述 Apache Flume...
    rabbitGYK閱讀 11,470評論 13 34
  • 介紹 概述 Apache Flume是為有效收集聚合和移動大量來自不同源到中心數(shù)據(jù)存儲而設(shè)計的可分布运怖,可靠的,可用...
    ximengchj閱讀 3,525評論 0 13
  • 介紹 概述 Apache Flume是一個分布式的夏伊,可靠的摇展,高可用的系統(tǒng),用于高效地從多個不同的數(shù)據(jù)源收集溺忧,匯總及...
    steanxy閱讀 1,069評論 0 1
  • 什么都不說了咏连,直接上圖吧
    瀾珊澤泮閱讀 232評論 0 0