大數(shù)據(jù)項(xiàng)目,ETL離線數(shù)據(jù),日志分析系統(tǒng)
大數(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ù)。 現(xiàn)在ETL依然是很多公司的選擇,當(dāng)然不必要寫代碼,可以使用sqoop和kettle工具對數(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)品,走去會議室嘮嘮嗑” 。 我一驚,公司果然不會讓咱閑著,昨天剛搞完上個(gè)項(xiàng)目,現(xiàn)在又來新的需求、新項(xiàng)目了。說走咱就走,我隨手拿起了身邊的板磚,產(chǎn)品經(jīng)理驚恐的看著我:“你你你...,你想干嘛”? 從會議室里出來,說干就干,定了需求,咱就擼起袖子加油干。 話說某天一個(gè)用戶通過web訪問我們網(wǎng)站產(chǎn)生了日志,運(yùn)營部門的男神、女神們要分析用戶的行為數(shù)據(jù),提前埋點(diǎn),后端工程師哥哥設(shè)置了字段屬性,用這些字段分析用戶的行為。 跟后端開發(fā)哥哥們對完數(shù)據(jù)需求,著手開發(fā)。 完整鏈路的ETL日志處理系統(tǒng) 通過nginx服務(wù)器,使用flume收集了一批又一批的日志數(shù)據(jù),把這些數(shù)據(jù)放到HFDS(分布式文件系統(tǒng))上。 一旁的實(shí)習(xí)生小王很是不解:“哥,為啥放到HDFS上,不直接存Hive表里” 。 我意味深長的說:“少年對原始數(shù)據(jù)備份處理是很必要的?!?/span>存HDFS的同時(shí),建了一張Hive分區(qū)表,以天作為分區(qū),分區(qū)表放每日產(chǎn)生的日志數(shù)據(jù)。 如果直接把這些數(shù)據(jù)給運(yùn)營人員和老板看,估計(jì)第二天辦公室里會傳來“小明啊,我看你最近表現(xiàn)不錯(cuò),去財(cái)務(wù)那里結(jié)了工資,明天就別來了?!?/span> 為了讓數(shù)據(jù)更直觀,運(yùn)營人員能方便的分析不同維度的日志數(shù)據(jù)。我使用mapreduce對日志數(shù)據(jù)進(jìn)行處理,通宵加班加點(diǎn)搞定,用手撫了撫锃亮的腦門,頭猛地一甩,頭屑亂飛,發(fā)出一陣得意的笑聲:“搞定?!?/span> 數(shù)據(jù)清洗完畢,把清洗處理完成有一定格式的日志數(shù)據(jù),存入Hive分區(qū)表中。 Hive是個(gè)很強(qiáng)大的數(shù)據(jù)庫,數(shù)據(jù)存在分布式文件系統(tǒng)HDFS上面,非常適合做數(shù)據(jù)的離線分析。做數(shù)據(jù)分析Hive是不二的選擇,使用類SQL的HQL語言,會SQL就會用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ā)分析老鳥呢,陰溝翻船。我對運(yùn)營小姐姐說:“女神,等會,馬上就好?!?/span> 我又噼里啪啦一陣敲,把Hive數(shù)據(jù)庫中的數(shù)據(jù),根據(jù)不用業(yè)務(wù)維度查詢出來以后同步到Oracle數(shù)據(jù)庫,對接上報(bào)表系統(tǒng),完美解決查詢太慢的問題,數(shù)據(jù)分析完成。 一個(gè)完整的ETL項(xiàng)目就算完成了,事情總算告一段落。 后來,為了方便運(yùn)營人員和老板更直觀的點(diǎn)點(diǎn)報(bào)表系統(tǒng),看不同維度的運(yùn)營數(shù)據(jù),又對報(bào)表系統(tǒng)進(jìn)行開發(fā),可以讓不會SQL的他們,選擇不同維度的屬性就能出來不一樣的結(jié)果。 后續(xù) 本來打算進(jìn)一步優(yōu)化項(xiàng)目,搞得更智能化、效率更高。對有些不合理的地方進(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í)會的技術(shù)不多,考慮的不全,就按照上面程序來做的。之后,使用Oozie替代了LInux自帶的Crontab定時(shí)調(diào)度。定時(shí)讓mapredcue每天凌晨以后跑任務(wù),設(shè)置了任務(wù)失敗重啟檢測系統(tǒng),錯(cuò)誤日志分析系統(tǒng)等等。 總結(jié),對大數(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)營的方向。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點(diǎn)擊舉報(bào) 。