大數(shù)據(jù)的價(jià)值之一就是數(shù)據(jù)可視化因惭。
大數(shù)據(jù)(bigdata)岳锁,看著挺高大上的,其實(shí)就是數(shù)據(jù)量大了蹦魔,想從中發(fā)現(xiàn)商業(yè)規(guī)律激率,找到商業(yè)價(jià)值咳燕。從事三年多大數(shù)據(jù)開發(fā)和數(shù)據(jù)分析工程師,說說平時(shí)工作做的數(shù)據(jù)可視化的事吧乒躺。
話說那天風(fēng)和日麗招盲,某個(gè)人突發(fā)奇想,創(chuàng)建了個(gè)公司嘉冒,公司成立以后發(fā)展不錯(cuò)曹货,拿到了融資。業(yè)務(wù)越來越大讳推、用戶越來越多顶籽,產(chǎn)生的數(shù)據(jù)越來越多。后來美國有個(gè)數(shù)據(jù)科學(xué)家說银觅,同志們蜕衡,數(shù)據(jù)很重要,數(shù)據(jù)是21世紀(jì)的石油设拟,誰能提前利用、挖掘了數(shù)據(jù)久脯,誰就能掙錢纳胧,就這樣紅果果、赤裸裸的誘惑你帘撰,一夜之間跑慕,大數(shù)據(jù)的概念產(chǎn)生了。
初期摧找,說到大數(shù)據(jù)核行,大家首先想到這家公司體量大,發(fā)展不錯(cuò)蹬耘。因?yàn)橹パw量小的公司Excel報(bào)表數(shù)據(jù)分析就可以完美解決問題,能給決策層提供直觀的數(shù)據(jù)支撐综苔。比如惩系,季度銷售數(shù)據(jù),年度營業(yè)數(shù)據(jù)等等如筛。隨著互聯(lián)網(wǎng)的發(fā)展堡牡,公司越做越大,數(shù)據(jù)越來越多杨刨,傳統(tǒng)Excel晤柄、Mysql這些數(shù)據(jù)分析系統(tǒng)完全hold不住了,新技術(shù)應(yīng)運(yùn)而生妖胀。越來越多的數(shù)據(jù)分析系統(tǒng)和數(shù)據(jù)處理軟件被開發(fā)出來芥颈,這些技術(shù)全部都是為了公司盈利而發(fā)展出來的惠勒。不以提升性能、給公司創(chuàng)盈利為目的的技術(shù)浇借,肯定不是好技術(shù)捉撮。
做一個(gè)日志處理系統(tǒng)
現(xiàn)在ETL依然是很多公司的選擇,當(dāng)然不必要寫代碼妇垢,可以使用sqoop和kettle工具對(duì)數(shù)據(jù)進(jìn)行清晰巾遭。不過很多情況下,還是需要使用mapredcue和spark做數(shù)據(jù)處理的闯估,這樣B格更高灼舍。大數(shù)據(jù)剛發(fā)展之初,是mapreduce的天下涨薪,mapreduce非常適合做離線數(shù)據(jù)分析骑素。后來spark得到發(fā)展,越來越多的程序員同學(xué)刚夺,喜歡使用spark開發(fā)献丑。一是內(nèi)存計(jì)算快,二是代碼量少侠姑,當(dāng)然還有其他很多因素创橄,具體就不多說了。
//spark版的wordcount莽红,核心代碼
val sc = new SparkContext(new SparkConf().setAppName("").setMaster(""))
sc.textFile("").flatMap(_.split("\t")).map((_,1)).reduceByKey(_+_)
就這么簡簡單單的幾行代碼就能實(shí)現(xiàn)wordcount單詞統(tǒng)計(jì)妥畏,使用mapreduce需要寫一堆代碼。有興趣的可以看下安吁,mapreduce版本的wordcount醉蚁。下面就讓我們來看看mapredcue版的ETL,處理日志系統(tǒng)鬼店,這也是我畢業(yè)以后轉(zhuǎn)做大數(shù)據(jù)開發(fā)做的第一個(gè)項(xiàng)目网棍。
使用mapreduce處理日志數(shù)據(jù)
那天,我正在工位上悠閑地喝著咖啡妇智,產(chǎn)品經(jīng)理走到我身邊确沸,拍拍我肩膀說:“男神,我們要做個(gè)產(chǎn)品俘陷,分析日志的產(chǎn)品罗捎,走去會(huì)議室嘮嘮嗑”。我一驚拉盾,公司果然不會(huì)讓咱閑著桨菜,昨天剛搞完上個(gè)項(xiàng)目,現(xiàn)在又來新的需求、新項(xiàng)目了倒得。說走咱就走泻红,我隨手拿起了身邊的板磚,產(chǎn)品經(jīng)理驚恐的看著我:“你你你...霞掺,你想干嘛”谊路?
從會(huì)議室里出來,說干就干菩彬,定了需求缠劝,咱就擼起袖子加油干。
話說某天一個(gè)用戶通過web訪問我們網(wǎng)站產(chǎn)生了日志骗灶,運(yùn)營部門的男神惨恭、女神們要分析用戶的行為數(shù)據(jù),提前埋點(diǎn)耙旦,后端工程師哥哥設(shè)置了字段屬性脱羡,用這些字段分析用戶的行為。跟后端開發(fā)哥哥們對(duì)完數(shù)據(jù)需求免都,著手開發(fā)锉罐。
完整鏈路的ETL日志處理系統(tǒng)
通過nginx服務(wù)器,使用flume收集了一批又一批的日志數(shù)據(jù)绕娘,把這些數(shù)據(jù)放到HFDS(分布式文件系統(tǒng))上脓规。
一旁的實(shí)習(xí)生小王很是不解:“哥,為啥放到HDFS上业舍,不直接存Hive表里”。我意味深長的說:“少年對(duì)原始數(shù)據(jù)備份處理是很必要的升酣∠夏海”
存HDFS的同時(shí),建了一張Hive分區(qū)表噩茄,以天作為分區(qū)下面,分區(qū)表放每日產(chǎn)生的日志數(shù)據(jù)。
如果直接把這些數(shù)據(jù)給運(yùn)營人員和老板看绩聘,估計(jì)第二天辦公室里會(huì)傳來“小明啊沥割,我看你最近表現(xiàn)不錯(cuò),去財(cái)務(wù)那里結(jié)了工資凿菩,明天就別來了机杜。”
為了讓數(shù)據(jù)更直觀衅谷,運(yùn)營人員能方面的分析不同維度的日志數(shù)據(jù)椒拗。我使用mapreduce對(duì)日志數(shù)據(jù)進(jìn)行處理,通宵加班加點(diǎn)搞定,用手撫了撫锃亮的腦門蚀苛,頭猛地一甩在验,頭屑亂飛,發(fā)出一陣得意的笑聲:“搞定堵未∫干啵”
數(shù)據(jù)清洗完畢,把清洗處理完成有一定格式的日志數(shù)據(jù)渗蟹,存入Hive分區(qū)表中块饺。Hive是個(gè)很強(qiáng)大的數(shù)據(jù)庫,數(shù)據(jù)存在分布式文件系統(tǒng)HDFS上面拙徽,非常適合做數(shù)據(jù)的離線分析刨沦。做數(shù)據(jù)分析Hive是不二的選擇,使用類SQL的HQL語言膘怕,會(huì)SQL就會(huì)用Hive想诅,方便數(shù)據(jù)分析人員使用的數(shù)據(jù)庫。
第二天早上岛心,運(yùn)營小姐姐剛到公司来破,就要看昨天官網(wǎng)日志PV和UV等各維度的指標(biāo)情況,我噼里啪啦一陣敲忘古,小姐姐滿眼小星星的看著徘禁,我心里那個(gè)美啊髓堪!報(bào)表頁面送朱,半天沒數(shù)據(jù)出來。
納尼干旁?我用手一拍額頭驶沼,Hive底層走的mapreduce,直接查hive庫那效率真不敢恭維争群,尤其涉及到復(fù)雜HQL語句的時(shí)候回怜。暗罵一聲,還數(shù)據(jù)開發(fā)分析老鳥呢换薄,陰溝翻船玉雾。我對(duì)運(yùn)營小姐姐說:“女神,等會(huì)轻要,馬上就好复旬。”
我又噼里啪啦一陣敲冲泥,把Hive數(shù)據(jù)庫中的數(shù)據(jù)赢底,根據(jù)不用業(yè)務(wù)維度查詢出來以后同步到Oracle數(shù)據(jù)庫,對(duì)接上報(bào)表系統(tǒng),完美解決查詢太慢的問題幸冻,數(shù)據(jù)分析完成粹庞。
一個(gè)完整的ETL項(xiàng)目就算完成了,事情總算告一段落洽损。
后來庞溜,為了方便運(yùn)營人員和老板更直觀的點(diǎn)點(diǎn)報(bào)表系統(tǒng),看不同維度的運(yùn)營數(shù)據(jù)碑定,又對(duì)報(bào)表系統(tǒng)進(jìn)行開發(fā)流码,可以讓不會(huì)SQL的他們,選擇不同維度的屬性就能出來不一樣的結(jié)果延刘。
后續(xù)
本來打算進(jìn)一步優(yōu)化項(xiàng)目漫试,搞得更智能化、效率更高碘赖。對(duì)有些不合理的地方進(jìn)行優(yōu)化驾荣,但是公司流計(jì)算實(shí)時(shí)處理系統(tǒng)項(xiàng)目開啟了,領(lǐng)導(dǎo)讓叫我把后續(xù)事情交給實(shí)習(xí)生來做普泡。后面一門心思在做爬蟲和實(shí)時(shí)系統(tǒng)播掷,就沒負(fù)責(zé)離線數(shù)據(jù)處理項(xiàng)目了。
日志處理系統(tǒng)撼班,是一個(gè)很簡單的系統(tǒng)歧匈。這是我剛畢業(yè)就開始接觸的一個(gè)系統(tǒng),當(dāng)時(shí)會(huì)的技術(shù)不多砰嘁,考慮的不全件炉,就按照上面程序來做的。之后矮湘,使用Oozie替代了LInux自帶的Crontab定時(shí)調(diào)度斟冕。定時(shí)讓mapredcue每天凌晨以后跑任務(wù),設(shè)置了任務(wù)失敗重啟檢測(cè)系統(tǒng)板祝,錯(cuò)誤日志分析系統(tǒng)等等宫静。
總結(jié)走净,對(duì)大數(shù)據(jù)來說券时,數(shù)據(jù)分析是很重要的一環(huán)。通過開發(fā)人員伏伯,把一串復(fù)雜的橘洞、抽象化的日志數(shù)據(jù),經(jīng)過清晰處理说搅,最后統(tǒng)計(jì)形成直觀的報(bào)表炸枣,展示給運(yùn)營和決策部門,公司領(lǐng)導(dǎo)層可以根據(jù)這些數(shù)據(jù)決定今后運(yùn)營的方向。