三冤寿、數(shù)據(jù)倉庫理論與應(yīng)用
3.1大數(shù)據(jù)基礎(chǔ)Hadoop
3.1.1Hadoop三架馬車
Hadoop是一個(gè)分布式系統(tǒng)基礎(chǔ)架構(gòu)车吹,現(xiàn)在被廣泛地應(yīng)用于大數(shù)據(jù)平臺(tái)的開發(fā)尚镰,對(duì)處理海量數(shù)據(jù)有著其他技術(shù)無可匹敵的優(yōu)勢鼻种。
HDFS(Hadoop Distributed File System)、MapReduce與HBase被譽(yù)為分布式計(jì)算的三駕馬車澜薄。Hadoop基本架構(gòu)的底層是HDFS为肮,上面運(yùn)行的是MapReduce、Tez肤京、Spark颊艳,再往上封裝的是Pig和Hive
大數(shù)據(jù)技術(shù)首要的要求就是先把數(shù)據(jù)存下來,HDFS為了解決存儲(chǔ)的問題忘分,把大量的數(shù)據(jù)用成千上萬臺(tái)機(jī)器存儲(chǔ)棋枕,而用戶在前端看到的只是一個(gè)文件系統(tǒng),而不是許多文件系統(tǒng)妒峦,這是一種對(duì)用戶友好的處理方式重斑。HDFS會(huì)集中管理數(shù)據(jù),用戶只需要把精力花費(fèi)在如何使用和處理數(shù)據(jù)上
在解決了數(shù)據(jù)存儲(chǔ)的問題之后肯骇,如何更高效地處理數(shù)據(jù)呢窥浪?如果讓一臺(tái)機(jī)器處理TB級(jí)或者PB級(jí)的數(shù)據(jù),那么可能會(huì)花費(fèi)幾天甚至幾周的時(shí)間笛丙,而這對(duì)于很多公司的業(yè)務(wù)來說是不可接受的漾脂。
MapReduce/Spark提供一種可靠的、能夠運(yùn)行在集群上的計(jì)算模型胚鸯。MapReduce會(huì)把所有的函數(shù)都分為兩類骨稿,即Map和Reduce。Map會(huì)將數(shù)據(jù)分成很多份蠢琳,然后分配給不同的機(jī)器處理啊终;Reduce把計(jì)算的結(jié)果合并,得到最終的結(jié)果傲须。
但是如果直接使用MapReduce的程序蓝牲,會(huì)發(fā)現(xiàn)使用門檻比較高,Hive和Pig基于MapReduce的基礎(chǔ)封裝出一個(gè)更友好泰讽、更簡單的方式例衍,可以很容易地實(shí)現(xiàn)MapReduce程序。Pig以類似腳本的方式實(shí)現(xiàn)MapReduce已卸,Hive以SQL的方式實(shí)現(xiàn)佛玄。Hive和Pig會(huì)把腳本或者SQL自動(dòng)翻譯成MapReduce程序,然后交給計(jì)算引擎執(zhí)行計(jì)算累澡。
除了Hadoop體系架構(gòu)那些基礎(chǔ)工具外梦抢,還需要對(duì)以下幾個(gè)基礎(chǔ)工具做一些了解。
(1)Spark愧哟。Spark是一個(gè)開源的集群計(jì)算環(huán)境奥吩,Spark與Hadoop之間既相互補(bǔ)充哼蛆,又相互競爭。Spark啟用了內(nèi)存分布數(shù)據(jù)集霞赫,在處理某些工作負(fù)載方面表現(xiàn)得更加優(yōu)越腮介,交互也會(huì)更加友好。
(2)Kafka端衰。Kafka是一種高吞吐量的分布式發(fā)布訂閱消息系統(tǒng)叠洗,它可以處理各大網(wǎng)站或者App中用戶的動(dòng)作流數(shù)據(jù)。用戶行為數(shù)據(jù)是后續(xù)進(jìn)行業(yè)務(wù)分析和優(yōu)化的重要數(shù)據(jù)資產(chǎn)旅东,這些數(shù)據(jù)通常以處理日志和日志聚合的方式解決灭抑。
(3)Storm。Storm主要應(yīng)用于分布式數(shù)據(jù)處理玉锌,包括實(shí)時(shí)分析名挥、在線機(jī)器學(xué)習(xí)、信息流處理主守、連續(xù)性的計(jì)算禀倔、ETL等。Storm還可以應(yīng)用于實(shí)時(shí)處理参淫,被稱為實(shí)時(shí)版的Hadoop救湖,每秒可以處理百萬級(jí)的消息,并且Storm可以保證每個(gè)消息都能夠得到處理涎才,具有運(yùn)維簡單鞋既、高度容錯(cuò)、無數(shù)據(jù)丟失耍铜、多語言的特點(diǎn)邑闺。
(4)HBase。HBase是一個(gè)構(gòu)建于HDFS上的分布式棕兼、面向列的存儲(chǔ)系統(tǒng)陡舅。以Key-Value對(duì)的方式存儲(chǔ)數(shù)據(jù)并對(duì)存取操作做了優(yōu)化,能夠飛快地根據(jù)Key獲取綁定的數(shù)據(jù)伴挚。例如靶衍,從幾PB的數(shù)據(jù)中找身份證號(hào)只需要零點(diǎn)幾秒。
(5)HUE茎芋。HUE 是Cloudera 的大數(shù)據(jù)Web可視化工具颅眶,主要用來簡化用戶和Hadoop集群的交互√锩郑可以在Web頁面把數(shù)據(jù)從HDFS等系統(tǒng)導(dǎo)入Hive中涛酗,可以直接通過HUE以HiveQL的方式對(duì)數(shù)據(jù)查詢展現(xiàn)。同時(shí),還可以保存SQL語句煤杀,并查看和刪除歷史SQL語句眷蜈,對(duì)于查詢后的數(shù)據(jù),可以選擇表格沈自、柱狀圖、折線圖辜妓、餅狀圖枯途、地圖等多種可視化圖形展現(xiàn),操作十分簡單籍滴,如果想繼續(xù)分析酪夷,可以使用下載功能下載保存為Excel。
(6)Oozie孽惰。Oozie 是一個(gè)工作流調(diào)度系統(tǒng)晚岭,統(tǒng)一管理工作流的調(diào)度順序、安排任務(wù)的執(zhí)行時(shí)間等勋功,用來管理Hadoop的任務(wù)坦报。Oozie集成了Hadoop的MapReduce、Pig狂鞋、Hive等協(xié)議以及Java片择、Shell腳本等任務(wù),底層仍然是一個(gè)MapReduce程序骚揍。
(7)ZooKeeper字管。ZooKeeper是Hadoop和HBase的重要組件,是一個(gè)分布式開放的應(yīng)用程序協(xié)調(diào)服務(wù)信不,主要為應(yīng)用提供配置維護(hù)嘲叔、域名服務(wù)、分布式同步抽活、組服務(wù)等一致性服務(wù)硫戈。
(8)YARN。Hadoop生態(tài)有很多工具酌壕,為了保證這些工具有序地運(yùn)行在同一個(gè)集群上掏愁,需要有一個(gè)調(diào)度系統(tǒng)進(jìn)行協(xié)調(diào)指揮,YARN就是基于此背景誕生的資源統(tǒng)一管理平臺(tái)卵牍。
3.1.2其他常用工具
除了上面介紹的基礎(chǔ)工具之外果港,以下是一些常用工具。
(1)Elasticsearch糊昙。Elasticsearch是基于Lucene的搜索服務(wù)器辛掠,提供了一個(gè)基于多用戶的分布式全文搜索引擎,基于RESTful Web接口。Elasticsearch作為Apache許可條款下的開放源碼發(fā)布萝衩,是當(dāng)前流行的企業(yè)級(jí)搜索引擎回挽。Elasticsearch主要應(yīng)用于云計(jì)算中,能夠?qū)崿F(xiàn)實(shí)時(shí)搜索猩谊,具有穩(wěn)定千劈、可靠、快速牌捷、安裝和使用方便的特點(diǎn)墙牌。
(2)Memcached。Memcached是一個(gè)開源的暗甥、高性能喜滨、分布式內(nèi)存對(duì)象緩存系統(tǒng),基于內(nèi)存的Key-Value存儲(chǔ)撤防,解決了大數(shù)據(jù)量緩存的問題虽风,主要應(yīng)用于減輕數(shù)據(jù)庫負(fù)載。它通過在內(nèi)存中緩存數(shù)據(jù)查詢結(jié)果寄月,減少數(shù)據(jù)庫訪問次數(shù)來提高動(dòng)態(tài)網(wǎng)址應(yīng)用的速度辜膝。同時(shí),因?yàn)樗銐蚝啙嵍鴱?qiáng)大剥懒,便于快速開發(fā)内舟,所以得到了廣泛的應(yīng)用。
(3)Redis初橘。Redis是開源的可以基于內(nèi)存同時(shí)也可以持久化的日志型Key-Value數(shù)據(jù)庫验游,它使用ANSI C語言編寫,支持網(wǎng)絡(luò)保檐,并提供多種語言的API耕蝉。與Memcached類似,為了保證查詢速度和效率夜只,數(shù)據(jù)都是緩存在內(nèi)存中的垒在,區(qū)別的是Redis多了一步持久性操作,會(huì)定期把更新的數(shù)據(jù)寫入磁盤或者文件中扔亥,并且在此基礎(chǔ)上實(shí)現(xiàn)主從模式的數(shù)據(jù)同步场躯。正是因?yàn)镽edis的這一點(diǎn),它可以很好地彌補(bǔ)Memcached這類單純基于Key-Value存儲(chǔ)的不足旅挤,在一些應(yīng)用場景中踢关,可以配合關(guān)系型數(shù)據(jù)庫一起使用,同時(shí)對(duì)關(guān)系型數(shù)據(jù)庫起到了很好的補(bǔ)充作用粘茄。
3.2大數(shù)據(jù)平臺(tái)層級(jí)結(jié)構(gòu)
根據(jù)大數(shù)據(jù)平臺(tái)架構(gòu)中流入和流出的過程签舞,可以把其分為三層——原始數(shù)據(jù)層秕脓、數(shù)據(jù)倉庫、數(shù)據(jù)應(yīng)用層儒搭。
原始數(shù)據(jù)層吠架,也叫ODS(Operational Data Store)層,一般由基礎(chǔ)日志數(shù)據(jù)搂鲫、業(yè)務(wù)線上庫和其他來源數(shù)據(jù)獲得傍药。
數(shù)據(jù)倉庫的數(shù)據(jù)來自對(duì)ODS層的數(shù)據(jù)經(jīng)過ETL(抽取Extra,轉(zhuǎn)化Transfer默穴,裝載Load)處理怔檩。
數(shù)據(jù)倉庫的主要功能是以O(shè)DS層數(shù)據(jù)為基礎(chǔ),通過邏輯加工產(chǎn)出數(shù)據(jù)倉庫主題表蓄诽。數(shù)據(jù)倉庫又細(xì)分為基礎(chǔ)層、主題層和數(shù)據(jù)集市
數(shù)據(jù)應(yīng)用層主要用于處理消費(fèi)數(shù)據(jù)倉庫的數(shù)據(jù)
3.2.1ODS層
對(duì)于ODS層而言媒吗,客戶端用戶操作日志是一個(gè)主要的數(shù)據(jù)來源仑氛,它是分析App和產(chǎn)品優(yōu)化的基礎(chǔ);另一部分來源于業(yè)務(wù)的數(shù)據(jù)庫闸英,例如訂單的交易情況锯岖。
ODS層是當(dāng)前的、不斷變化的數(shù)據(jù)甫何,而數(shù)據(jù)倉庫保留的是歷史的出吹、不再變化的數(shù)據(jù),所以一般來說會(huì)落后ODS層一天或一天以上的數(shù)據(jù)辙喂。
ODS層具備以下幾個(gè)作用:
(1)在業(yè)務(wù)系統(tǒng)和數(shù)據(jù)倉庫之間形成一個(gè)隔離層捶牢。
(2)轉(zhuǎn)移一部分業(yè)務(wù)系統(tǒng)細(xì)節(jié)查詢的功能
(3)完成數(shù)據(jù)倉庫中不能完成的一些功能
3.2.2數(shù)據(jù)倉庫
數(shù)據(jù)倉庫(Data Warehouse,DW)是為了方便企業(yè)快速做各種業(yè)務(wù)決策提供數(shù)據(jù)支撐而構(gòu)建的集成化數(shù)據(jù)環(huán)境巍耗。
數(shù)據(jù)倉庫本身并不“生產(chǎn)”任何數(shù)據(jù)秋麸,同時(shí)自身也不需要“消費(fèi)”任何數(shù)據(jù),數(shù)據(jù)來源于外部炬太,并且開放給外部應(yīng)用
根據(jù)數(shù)據(jù)倉庫處理的數(shù)據(jù)層次不同灸蟆,數(shù)據(jù)倉庫主要分為基礎(chǔ)層、主題層亲族、數(shù)據(jù)集市這三層炒考。
1.基礎(chǔ)層
基礎(chǔ)層的主要作用是對(duì)ODS層的數(shù)據(jù)進(jìn)行輕度匯總,產(chǎn)出輕度匯總明細(xì)霎迫、維度表斋枢、碼表、事實(shí)集等一些基礎(chǔ)數(shù)據(jù)女气。
2.主題層
主題層為數(shù)據(jù)的高度聚合層杏慰,按照一定的維度和業(yè)務(wù)邏輯,對(duì)一類數(shù)據(jù)進(jìn)行聚合,主要生成畫像表和主題表缘滥。主題層的數(shù)據(jù)來源是基礎(chǔ)層和ODS層轰胁。
3.數(shù)據(jù)集市
數(shù)據(jù)集市(Data Mart)也叫數(shù)據(jù)市場,主要功能是將主題層和基礎(chǔ)層的數(shù)據(jù)按各業(yè)務(wù)需求進(jìn)行聚合朝扼,生成寬表和Cube赃阀,并直接推送給數(shù)據(jù)分析和業(yè)務(wù)部門使用,例如直接推送表數(shù)據(jù)至MySQL數(shù)據(jù)庫擎颖。
3.2.3數(shù)據(jù)的應(yīng)用
大數(shù)據(jù)的分析應(yīng)用主要分為以下三種形式榛斯。
第一種是描述性分析應(yīng)用。主要用來描述所關(guān)注的業(yè)務(wù)的數(shù)據(jù)表現(xiàn)搂捧,主要關(guān)注事情表面發(fā)生了什么驮俗,在數(shù)據(jù)分析之后,把數(shù)據(jù)可視化展現(xiàn)出來允跑,讓用戶可以了解業(yè)務(wù)的發(fā)展?fàn)顩r王凑。
第二種是預(yù)測性分析應(yīng)用。在描述性數(shù)據(jù)的基礎(chǔ)上聋丝,根據(jù)歷史數(shù)據(jù)情況索烹,在一定的算法和模型的指導(dǎo)下,進(jìn)一步預(yù)測業(yè)務(wù)的數(shù)據(jù)趨勢弱睦。例如百姓,美國歷年的總統(tǒng)大選預(yù)測結(jié)果、天氣預(yù)報(bào)預(yù)測天氣等都屬于預(yù)測性分析况木。
第三種是指導(dǎo)性分析應(yīng)用垒拢。基于現(xiàn)有的數(shù)據(jù)和對(duì)未來的預(yù)測情況焦读,可以用來指導(dǎo)完成一些業(yè)務(wù)決策和建議子库,例如為公司制訂戰(zhàn)略和運(yùn)營決策,真正通過數(shù)據(jù)驅(qū)動(dòng)決策矗晃,充分發(fā)揮大數(shù)據(jù)的價(jià)值仑嗅。
3.3數(shù)據(jù)埋點(diǎn)
一種常用的數(shù)據(jù)采集方法
3.3.1埋點(diǎn)方式
前端的埋點(diǎn)方式主要分為代碼埋點(diǎn)、可視化埋點(diǎn)张症、無埋點(diǎn)三種仓技。
1.代碼埋點(diǎn)
代碼埋點(diǎn)主要由App研發(fā)工程師手工在程序中寫代碼實(shí)現(xiàn),通過觸發(fā)某個(gè)動(dòng)作后程序自動(dòng)發(fā)送數(shù)據(jù)俗他。優(yōu)點(diǎn):具有很強(qiáng)的靈活性脖捻,可以控制發(fā)送的時(shí)機(jī)和發(fā)送方式等。缺點(diǎn):人力成本較高兆衅,需要研發(fā)工程師手工開發(fā)程序地沮,有時(shí)候還要依賴App發(fā)版來生效嗜浮。
2.可視化埋點(diǎn)
可視化埋點(diǎn)以前端可視化的方式記錄前端設(shè)置頁面元素與對(duì)其操作的關(guān)系,然后以后端截屏的方式統(tǒng)計(jì)數(shù)據(jù)摩疑。優(yōu)點(diǎn):簡單危融、方便,能夠快速地埋點(diǎn)雷袋。缺點(diǎn):比較受限吉殃,上報(bào)的行為信息有限。
3.無埋點(diǎn)
無埋點(diǎn)綁定頁面的各個(gè)控件楷怒,當(dāng)事件觸發(fā)時(shí)就會(huì)調(diào)用相關(guān)的接口上報(bào)數(shù)據(jù)蛋勺。優(yōu)點(diǎn):不需要埋點(diǎn),方便鸠删、快捷抱完、省事。缺點(diǎn):傳輸數(shù)據(jù)量比較大刃泡,需要消耗一定的數(shù)據(jù)存儲(chǔ)資源乾蛤。
3.3.2埋點(diǎn)事件
在記錄埋點(diǎn)信息時(shí),主要的埋點(diǎn)事件分為點(diǎn)擊事件捅僵、曝光事件和頁面停留時(shí)長三類。
1.點(diǎn)擊事件
用戶每點(diǎn)擊頁面上的一個(gè)按鈕一下都會(huì)記錄一次數(shù)據(jù)
2.曝光事件
當(dāng)用戶成功地進(jìn)入一個(gè)頁面時(shí)記錄一次數(shù)據(jù)眨层,當(dāng)刷新一次頁面時(shí)也會(huì)記錄一次數(shù)據(jù)庙楚,如果通過手機(jī)Home鍵切換出去,則不會(huì)記錄趴樱,因?yàn)橐呀?jīng)脫離了App馒闷,此處記錄也沒有太大的分析價(jià)值,記錄上來可能污染數(shù)據(jù)叁征。
3.頁面停留時(shí)長
頁面停留時(shí)長主要用來記錄用戶在一個(gè)頁面的停留時(shí)間纳账,它可以通過記錄用戶進(jìn)入頁面的時(shí)間t1和離開頁面的時(shí)間t2計(jì)算,計(jì)算公式可以簡單地表示為:用戶停留時(shí)間=離開頁面時(shí)間t2-進(jìn)入頁面時(shí)間t1捺疼。
3.3.3數(shù)據(jù)埋點(diǎn)實(shí)例
現(xiàn)在App端的數(shù)據(jù)埋點(diǎn)一般采取Key-Value的形式疏虫,Key一般表示某個(gè)事件,Value代表相對(duì)應(yīng)的值啤呼,一個(gè)Key可以對(duì)應(yīng)一個(gè)Value或者多個(gè)Value卧秘。
3.4指標(biāo)字典
指標(biāo)字典,是業(yè)務(wù)數(shù)據(jù)標(biāo)準(zhǔn)化的基礎(chǔ)官扣,目的是對(duì)指標(biāo)進(jìn)行統(tǒng)一管理翅敌,方便共享,達(dá)成對(duì)業(yè)務(wù)指標(biāo)的共識(shí)惕蹄,并且統(tǒng)一修改和維護(hù)蚯涮。