一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

數(shù)據(jù)雜談

 【點(diǎn)石成金】 2016-08-22

來源:http://www./blog


前言


記得幾年前,曾經(jīng)有人預(yù)測(cè)過未來最流行的三大技術(shù):大數(shù)據(jù)、高并發(fā)、數(shù)據(jù)挖掘。到現(xiàn)在來看,這三種技術(shù)的確也隨著這幾年互聯(lián)網(wǎng)的發(fā)展變得越發(fā)成熟和可靠。掌握這三種技術(shù)的人,不管是求職還是創(chuàng)業(yè),都屬于香餑餑。一個(gè)很深的印象就是當(dāng)年研究生畢業(yè)的時(shí)候,專業(yè)是數(shù)據(jù)挖掘、大數(shù)據(jù)的學(xué)生都比較受各種企業(yè)的青睞,不管他是不是真的掌握了這些東西。雖然我對(duì)大部分高校的相關(guān)專業(yè)持懷疑態(tài)度,但是卻也不得不承認(rèn),這些專業(yè)的確改變了很多東西,也給很多學(xué)生鍍上了一層金。


自己一直從事的是Java EE中間件、基礎(chǔ)架構(gòu)等方面的研發(fā)工作,對(duì)數(shù)據(jù)這一塊只是略知皮毛,在前東家的時(shí)候我也沒有機(jī)會(huì)接觸數(shù)據(jù)平臺(tái)。但由于現(xiàn)公司業(yè)務(wù)的原因,卻不得不去觸碰這一塊,到目前為止也就僅僅半年時(shí)間(其間穿插各種協(xié)調(diào)、管理的雜事)。因此,數(shù)據(jù)相關(guān)的東西對(duì)我來說完全是一個(gè)新的領(lǐng)域,算是離開了自己的舒適區(qū)。不過,逃離舒適區(qū)這個(gè)想想也挺興奮的。


數(shù)據(jù)


什么是數(shù)據(jù)?


最近有一本很火的書叫《精益數(shù)據(jù)分析》,其核心的一個(gè)觀點(diǎn)就是:需要用數(shù)據(jù)驅(qū)動(dòng)產(chǎn)品和公司的發(fā)展,而不能靠直覺或者拍腦袋??梢姡瑪?shù)據(jù)是多么的重要。在一個(gè)產(chǎn)品的生命周期中,會(huì)產(chǎn)生很多數(shù)據(jù):用戶信息、用戶行為信息、ugc數(shù)據(jù)等等。這些數(shù)據(jù)表現(xiàn)形式可以為文字、圖片、日志、視頻、音頻等等。


從技術(shù)角度來講,數(shù)據(jù)一般分為結(jié)構(gòu)化數(shù)據(jù)、半結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)。


  • 結(jié)構(gòu)化數(shù)據(jù):指的是行數(shù)據(jù)庫(kù)可以存儲(chǔ)的,數(shù)據(jù)具有相同的字段,以及相同的存儲(chǔ)大小,可以用二維表的邏輯結(jié)構(gòu)來表達(dá)實(shí)現(xiàn)。

  • 半結(jié)構(gòu)化數(shù)據(jù):半結(jié)構(gòu)化數(shù)據(jù),指的整體上是結(jié)構(gòu)化數(shù)據(jù)形式,但字段數(shù)目不定,數(shù)據(jù)結(jié)構(gòu)和內(nèi)容混雜在一起。

  • 非結(jié)構(gòu)化數(shù)據(jù):不方便用二維表描述的數(shù)據(jù),如各種文檔、圖片、音/視頻等。


能用來干什么?-數(shù)據(jù)挖掘


說到數(shù)據(jù)的作用,不得不提數(shù)據(jù)分析師這個(gè)職位。此職位一般來說傾向的是數(shù)學(xué)相關(guān)專業(yè)人士,使用數(shù)據(jù)來指導(dǎo)產(chǎn)品、運(yùn)營(yíng)、市場(chǎng)等工作,是公司中使用數(shù)據(jù)最多的人。在公司中,市場(chǎng)運(yùn)營(yíng)銷售這幾個(gè)部門也都是和數(shù)據(jù)關(guān)系很密切的。市場(chǎng)需要參考數(shù)據(jù)分析哪一個(gè)渠道推廣效果更好,運(yùn)營(yíng)部門需要根據(jù)數(shù)據(jù)分析什么內(nèi)容更能提高產(chǎn)品的活躍度,銷售部門則需要數(shù)據(jù)反映公司的收入情況。當(dāng)然,除了這些,數(shù)據(jù)挖掘就是另一個(gè)很重要的使用數(shù)據(jù)的方面了,可以使用數(shù)據(jù)對(duì)用戶進(jìn)行行為分析,從而挖掘用戶的興趣,最終達(dá)到精準(zhǔn)推薦、精準(zhǔn)營(yíng)銷的目的。


概括來看,數(shù)據(jù)的作用就是數(shù)據(jù)挖掘,就是試圖從海量數(shù)據(jù)中找出有用的知識(shí),也可以稱為“知識(shí)發(fā)現(xiàn)”。數(shù)據(jù)挖掘的支撐技術(shù)主要包含統(tǒng)計(jì)學(xué)以及機(jī)器學(xué)習(xí)兩方面。從這個(gè)角度來看,數(shù)據(jù)主要有以下兩點(diǎn)作用:


  • 數(shù)據(jù)統(tǒng)計(jì):通過對(duì)數(shù)據(jù)的統(tǒng)計(jì)計(jì)算出一些和產(chǎn)品、用戶相關(guān)的指標(biāo),從而指導(dǎo)產(chǎn)品、市場(chǎng)、運(yùn)營(yíng)、銷售工作。

  • 機(jī)器學(xué)習(xí):使用相關(guān)技術(shù)讓機(jī)器通過已有的數(shù)據(jù)學(xué)習(xí)到新的有用的知識(shí)。比如:從已有的用戶行為數(shù)據(jù)分析得到用戶的興趣、愛好等信息,從而進(jìn)一步實(shí)現(xiàn)用戶個(gè)性化推薦。個(gè)性化推薦也是機(jī)器學(xué)習(xí)目前使用數(shù)據(jù)最為廣泛的一點(diǎn)。


數(shù)據(jù)庫(kù)&&數(shù)據(jù)倉(cāng)庫(kù)


有了數(shù)據(jù),就需要有存放數(shù)據(jù)的地方。數(shù)據(jù)庫(kù)和數(shù)據(jù)倉(cāng)庫(kù)即存放數(shù)據(jù)庫(kù)的兩種形式。兩者在本質(zhì)上沒有區(qū)別,都是為了存儲(chǔ)數(shù)據(jù)。


  • 數(shù)據(jù)庫(kù):面向業(yè)務(wù)設(shè)計(jì),一般針對(duì)的是在線業(yè)務(wù),存儲(chǔ)的是在線業(yè)務(wù)數(shù)據(jù)。如:Oracle、DB2、MySQL、Sybase、MS SQL Server等??梢苑譃椋宏P(guān)系型數(shù)據(jù)庫(kù)和NoSql數(shù)據(jù)庫(kù),其中后者又可分為KV數(shù)據(jù)庫(kù)、文檔型數(shù)據(jù)庫(kù)、列數(shù)據(jù)庫(kù)。


  • 數(shù)據(jù)倉(cāng)庫(kù):是數(shù)據(jù)庫(kù)概念的升級(jí),面向分析,存儲(chǔ)的是歷史數(shù)據(jù)。從數(shù)據(jù)量來說,數(shù)據(jù)倉(cāng)庫(kù)要比數(shù)據(jù)庫(kù)更龐大得多。主要用于數(shù)據(jù)挖掘和數(shù)據(jù)分析,代表軟件為Hive。


ETL: 數(shù)據(jù)倉(cāng)庫(kù)很多時(shí)候是需要從其他地方傳輸數(shù)據(jù)到數(shù)據(jù)倉(cāng)庫(kù),這個(gè)過程就是ETL:extract-抽取、transform-轉(zhuǎn)換、load-加載。


數(shù)據(jù)的生命周期


無論是歷史數(shù)據(jù)還是線上數(shù)據(jù),都是有生命周期的。比如,對(duì)于一個(gè)產(chǎn)品的用戶活躍度統(tǒng)計(jì)業(yè)務(wù),最近半年的數(shù)據(jù)是熱點(diǎn)數(shù)據(jù),訪問較頻繁;而隨著時(shí)間的推移,慢慢的這些數(shù)據(jù)不再被頻繁關(guān)注,變?yōu)榱艘话銛?shù)據(jù);再隨著時(shí)間的推移,總有一天這些數(shù)據(jù)不再會(huì)被關(guān)注就成為了冷數(shù)據(jù)。


熱點(diǎn)數(shù)據(jù)→一般數(shù)據(jù)→冷數(shù)據(jù),這就是數(shù)據(jù)的一個(gè)生命周期,對(duì)于不同的生命周期,所需要的技術(shù)選型也應(yīng)該不一樣。


數(shù)據(jù)系統(tǒng)


不管是數(shù)據(jù)統(tǒng)計(jì)還是數(shù)據(jù)挖掘,構(gòu)建一個(gè)數(shù)據(jù)系統(tǒng)都是做好這些的前提。一般來說,構(gòu)建一個(gè)完備的數(shù)據(jù)系統(tǒng)有以下幾點(diǎn):


1.    數(shù)據(jù)采集


無論是移動(dòng)端還是web上,要做好數(shù)據(jù)采集集最重要的一點(diǎn)就是埋點(diǎn)。也就是要在你需要采集數(shù)據(jù)的地方做一個(gè)標(biāo)記,向服務(wù)端發(fā)起一個(gè)日志請(qǐng)求。當(dāng)然,對(duì)于服務(wù)端能夠通過業(yè)務(wù)邏輯獲取的內(nèi)容,原則上不要打點(diǎn)。比如,統(tǒng)計(jì)某一篇新聞的閱讀數(shù)目、點(diǎn)贊數(shù),這些行為其實(shí)在用戶打開此新聞、點(diǎn)贊時(shí)已經(jīng)發(fā)起了服務(wù)端請(qǐng)求,不需要再埋一個(gè)點(diǎn);此外,統(tǒng)計(jì)用戶數(shù)目這種,在用戶數(shù)據(jù)庫(kù)中就可以計(jì)算出來,也不需要埋點(diǎn)。埋點(diǎn)主要針對(duì)的是通過產(chǎn)品的業(yè)務(wù)邏輯無法獲取到的一些數(shù)據(jù),如一個(gè)站點(diǎn)中某一個(gè)模塊的pv、uv等。


埋點(diǎn)后向服務(wù)端發(fā)起日志請(qǐng)求,這些請(qǐng)求在用戶量規(guī)模并不很大的架構(gòu)設(shè)計(jì)中直接實(shí)時(shí)計(jì)算數(shù)據(jù)入庫(kù)即可,但是在用戶請(qǐng)求量很大的情況下,這種設(shè)計(jì)是有問題的,會(huì)增加業(yè)務(wù)請(qǐng)求的壓力,從而影響線上服務(wù),因此好的設(shè)計(jì)應(yīng)該是數(shù)據(jù)請(qǐng)求只形成一條日志(一般通過nginx日志實(shí)現(xiàn))。因此,這里很關(guān)鍵的一點(diǎn)就是如何將這些日志收集起來進(jìn)行處理。目前常用的技術(shù)有flume、Scribe、Chukwa等。其中,flume是目前比較成熟且應(yīng)用比較廣泛的方案。


由于從數(shù)據(jù)源到來的數(shù)據(jù)并不一定是我們處理需要的數(shù)據(jù)或者數(shù)據(jù)格式,因此這里還有數(shù)據(jù)的清洗過程,包括分析,驗(yàn)證,清洗,轉(zhuǎn)換,去重,


2.    數(shù)據(jù)隊(duì)列


數(shù)據(jù)采集之后需要通過數(shù)據(jù)隊(duì)列傳輸,這里的隊(duì)列主要起的是緩沖作用以及其他非采集數(shù)據(jù)源的輸入(比如某一業(yè)務(wù)邏輯產(chǎn)生了一條統(tǒng)計(jì)報(bào)文,可以直接寫入隊(duì)列中),可以采取本地隊(duì)列或者分布式隊(duì)列。目前,比較成熟的隊(duì)列有kafka、rabbitMQ等。其中,在數(shù)據(jù)統(tǒng)計(jì)領(lǐng)域kafka是應(yīng)用比較廣泛的。


3.    數(shù)據(jù)處理


對(duì)于采集到的數(shù)據(jù),很多是需要計(jì)算才能得到需要的統(tǒng)計(jì)結(jié)果的。這時(shí)候就牽扯到了計(jì)算模型。這里分為離線計(jì)算和實(shí)時(shí)計(jì)算兩種模型。離線計(jì)算針對(duì)實(shí)時(shí)來講,就是非實(shí)時(shí)的,可以定時(shí)調(diào)度進(jìn)行計(jì)算的,一般來說是耗時(shí)比較長(zhǎng),對(duì)結(jié)果需求沒那么實(shí)時(shí)的業(yè)務(wù)場(chǎng)景,適合非線上業(yè)務(wù);實(shí)時(shí)計(jì)算則是需要在數(shù)據(jù)一到達(dá)就開始進(jìn)行計(jì)算、處理的,適合對(duì)實(shí)時(shí)性要求高的一些業(yè)務(wù)場(chǎng)景,比如廣告的實(shí)時(shí)結(jié)算等。


4.    數(shù)據(jù)存儲(chǔ)


服務(wù)端在數(shù)據(jù)統(tǒng)計(jì)中一個(gè)關(guān)鍵的功能是對(duì)采集到的內(nèi)容進(jìn)行存儲(chǔ)。對(duì)于中小規(guī)模的數(shù)據(jù),使用mysql等傳統(tǒng)數(shù)據(jù)庫(kù)即可應(yīng)對(duì),大一點(diǎn)規(guī)模采用分表、分庫(kù)也能應(yīng)對(duì)。再大一點(diǎn)的那就只能祭出大數(shù)據(jù)數(shù)據(jù)庫(kù)了。此外,數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)也需要慎重考慮,尤其是在應(yīng)對(duì)多維度查詢的時(shí)候,不合理的數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)會(huì)導(dǎo)致低下的查詢效率和冗余的存儲(chǔ)空間。


5.    數(shù)據(jù)可視化


數(shù)據(jù)存儲(chǔ)的下一步是要把數(shù)據(jù)展示出來,也就是數(shù)據(jù)可視化。通常情況下,導(dǎo)出excel表格是一種形式,此外,web端/移動(dòng)端甚至pc端也需要展示數(shù)據(jù)的話,就引出了數(shù)據(jù)可視化技術(shù),尤其是在大數(shù)據(jù)量情況下如何更加高效快速地展示數(shù)據(jù)。


數(shù)據(jù)采集+數(shù)據(jù)隊(duì)列+數(shù)據(jù)處理+數(shù)據(jù)存儲(chǔ)+數(shù)據(jù)可視化即組成了一個(gè)完整的數(shù)據(jù)系統(tǒng)。而從本質(zhì)上來看,數(shù)據(jù)系統(tǒng)=數(shù)據(jù)+查詢,萬變不離其宗。


對(duì)于一般規(guī)模的產(chǎn)品,數(shù)據(jù)其實(shí)遠(yuǎn)遠(yuǎn)沒有達(dá)到需要使用大數(shù)據(jù)技術(shù)的地步。使用傳統(tǒng)的收集數(shù)據(jù)→定時(shí)調(diào)度程序計(jì)算,存儲(chǔ)到mysql中即可解決。如果有大的并發(fā)請(qǐng)求,那么使用數(shù)據(jù)隊(duì)列做緩沖。當(dāng)數(shù)據(jù)規(guī)模大到一定規(guī)模時(shí),例如mysql數(shù)據(jù)庫(kù)在分表分庫(kù)的情況下,單表數(shù)據(jù)量還是達(dá)到了千萬的規(guī)模、單機(jī)存儲(chǔ)依然不夠或者單機(jī)計(jì)算已經(jīng)慢到無法容忍。應(yīng)對(duì)這種情況,就需要分布式技術(shù)出場(chǎng)了。


說到這里,借用《計(jì)算廣告》一書中所講,對(duì)于數(shù)據(jù)分為三種:


  • 小規(guī)模數(shù)據(jù):此種數(shù)據(jù)可以通過采樣部分?jǐn)?shù)據(jù)即可反映出數(shù)據(jù)的特征。這時(shí)候,根本無需什么大數(shù)據(jù)技術(shù),單機(jī)規(guī)模的傳統(tǒng)數(shù)據(jù)系統(tǒng)架構(gòu)即可應(yīng)對(duì)這種場(chǎng)景。

  • 中等規(guī)模數(shù)據(jù):小規(guī)模數(shù)據(jù)無法反應(yīng)數(shù)據(jù)特征,當(dāng)數(shù)據(jù)規(guī)模達(dá)到一定規(guī)模時(shí),再增大特征趨向于平穩(wěn),那么此時(shí)也無需大數(shù)據(jù)技術(shù)的出場(chǎng)。

  • 大規(guī)模數(shù)據(jù):不能通過采樣來反應(yīng)數(shù)據(jù)特征,必須全量采集數(shù)據(jù)才能獲取到數(shù)據(jù)特征。此時(shí),就需要大數(shù)據(jù)技術(shù)來解決問題。


其中,大規(guī)模數(shù)據(jù)就不是一般架構(gòu)可以解決的了的了。


大數(shù)據(jù)


麥肯錫的《大數(shù)據(jù):創(chuàng)新、競(jìng)爭(zhēng)和生產(chǎn)力的下一個(gè)前沿領(lǐng)域》中對(duì)大數(shù)據(jù)的定義:


大數(shù)據(jù)指的是規(guī)模超過現(xiàn)有數(shù)據(jù)庫(kù)工具獲取、存儲(chǔ)、管理和分析能力的數(shù)據(jù)集,并同時(shí)強(qiáng)調(diào)并不是超過某個(gè)特定數(shù)量級(jí)的數(shù)據(jù)集才是大數(shù)據(jù)。


大數(shù)據(jù)系統(tǒng)通常被認(rèn)為具有數(shù)據(jù)的五個(gè)主要特征,通常稱為數(shù)據(jù)的5Vs。分別是大規(guī)模,多樣性,高效性、準(zhǔn)確性和價(jià)值性。


相關(guān)技術(shù)


大數(shù)據(jù)是一個(gè)很寬泛的概念。當(dāng)單機(jī)無法處理數(shù)據(jù)時(shí),就有了大數(shù)據(jù)。而應(yīng)對(duì)各種不同的業(yè)務(wù)場(chǎng)景,誕生了很多不同的軟件。完成一個(gè)功能完備的系統(tǒng)需要多個(gè)軟件的組合。


1.    文件/數(shù)據(jù)存儲(chǔ)


傳統(tǒng)的文件存儲(chǔ)都是單機(jī)的,不能橫跨不同的機(jī)器,一般會(huì)使用raid做安全冗余保障。但是還是無法從根本上解決問題。HDFS(Hadoop Distributed FileSystem)則是為了應(yīng)對(duì)這種業(yè)務(wù)場(chǎng)景產(chǎn)生的,其基本原理來自于google的gfs,讓大量的數(shù)據(jù)可以橫跨成千上百萬臺(tái)機(jī)器。但是對(duì)用戶來說,看到的文件和單機(jī)沒任何區(qū)別,已經(jīng)屏蔽掉了底層細(xì)節(jié)。


除了文件存儲(chǔ),還有數(shù)據(jù)的存儲(chǔ),即數(shù)據(jù)庫(kù)。傳統(tǒng)的mysql等數(shù)據(jù)庫(kù),在存儲(chǔ)結(jié)構(gòu)化、小規(guī)模數(shù)據(jù)的時(shí)候可以妥妥應(yīng)對(duì)。但當(dāng)需要存儲(chǔ)半結(jié)構(gòu)化或者非結(jié)構(gòu)化數(shù)據(jù),或者用分表、分庫(kù)來解決存儲(chǔ)性能、空間問題帶來了復(fù)雜的管理、join時(shí),就需要一種更好的數(shù)據(jù)庫(kù)的出現(xiàn)。大數(shù)據(jù)領(lǐng)域的Hbase就是為了這種場(chǎng)景產(chǎn)生的,其原理是google的BigTable。當(dāng)然,hbase底層還是依賴于hdfs,是一個(gè)針對(duì)半結(jié)構(gòu)化、非結(jié)構(gòu)化、稀疏的數(shù)據(jù)的數(shù)據(jù)庫(kù)。


此外,hbase和hdfs相比起mysql這種毫秒級(jí)數(shù)據(jù)庫(kù),其響應(yīng)速度是很慢的。如果線上業(yè)務(wù)場(chǎng)景需要使用這些數(shù)據(jù),那么這時(shí)候就需要更好的數(shù)據(jù)庫(kù)的出現(xiàn)。elasticserach就是其中的佼佼者,當(dāng)然,使用這種基于索引、高效的查詢數(shù)據(jù)庫(kù),并不建議存儲(chǔ)全量數(shù)據(jù)(除非你錢有的是)。一般情況下,存儲(chǔ)熱點(diǎn)數(shù)據(jù)即可。


2.    離線數(shù)據(jù)處理


大數(shù)據(jù)的處理是非常關(guān)鍵的一個(gè)環(huán)節(jié)。當(dāng)單機(jī)的處理程序無法在期望的時(shí)間內(nèi)處理完數(shù)據(jù)時(shí),就需要考慮使用分布式技術(shù)了。于是就出現(xiàn)了MapReduce、Tez、Spark這些技術(shù)。MapReduce是第一代計(jì)算引擎,Tez和Spark是第二代。MapReduce的設(shè)計(jì),采用了很簡(jiǎn)化的計(jì)算模型,只有Map和Reduce兩個(gè)計(jì)算過程(中間用Shuffle串聯(lián)),用這個(gè)模型,已經(jīng)可以處理大數(shù)據(jù)領(lǐng)域很大一部分問題了。但是,MR模型很簡(jiǎn)單,但也很笨重,有不少缺點(diǎn),比如:編程模型非常復(fù)雜;計(jì)算過程磁盤IO過多。于是催生出了第二代數(shù)據(jù)處理技術(shù),Tez、Spark這些鑒于MR模型的缺點(diǎn),引入了內(nèi)存cache之類新的feature,讓Map和Reduce之間的界限更模糊,數(shù)據(jù)交換更靈活,更少的磁盤讀寫,以便更方便地描述復(fù)雜算法,取得更高的吞吐量。


如上面所說,編寫MR的編程復(fù)雜度非常高,于是就產(chǎn)生了Hive、Pig,在MR上面又抽象了一層更高級(jí)的語法出來,大大簡(jiǎn)化了MR的編程復(fù)雜度。其中以Hive為代表是Sql on xx的一個(gè)典型應(yīng)用。之所以使用sql,一方面是容易編寫、容易維護(hù);另一方面SQL可以讓沒有編程技能的諸如數(shù)據(jù)分析師都可以不依賴工程師就可以使用數(shù)據(jù)。但由于一開始的hive還是基于MR之上的,因此,其運(yùn)算速度還是受到不少人的詬病。于是Hive on Tez / Spark和SparkSQL也出現(xiàn)了。它們都旨在用新一代通用計(jì)算引擎Tez或者Spark來跑SQL,這樣就避免了基于MR帶來的運(yùn)算瓶頸。


對(duì)于程序的離線數(shù)據(jù)處理,hive一般情況下都能夠滿足需求。但是對(duì)于數(shù)據(jù)分析師的數(shù)據(jù)分析需求來說,這速度就真的有點(diǎn)龜速了。因此為了應(yīng)對(duì)數(shù)據(jù)分析的需求,Impala、Presto、Drill這些交互式sql引擎應(yīng)運(yùn)而生。這些系統(tǒng)的唯一目標(biāo)就是快,能夠讓用戶更快速地處理SQL任務(wù),因此犧牲了通用性穩(wěn)定性等特性。


一個(gè)典型的數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)可以滿足中低速數(shù)據(jù)處理的需求:底層HDFS,之上是MR、Tez、Spark,再上面則是Hive、Pig;此外,直接跑在HDFS上的Presto、Impala等也是另一種方案。


由于是離線計(jì)算,因此是需要一個(gè)任務(wù)調(diào)度工具來定時(shí)調(diào)度計(jì)算過程的。比較流行的一個(gè)任務(wù)調(diào)度工具是azkaban,是一個(gè)基于工作流的調(diào)度軟件,在一定程度上能夠滿足目前的離線調(diào)度需求。


3.    實(shí)時(shí)計(jì)算


上面說的都是數(shù)據(jù)倉(cāng)庫(kù)以及離線處理需求,也是低速數(shù)據(jù)處理需求。對(duì)于高速的數(shù)據(jù)處理,則需要引出實(shí)時(shí)計(jì)算的概念,也叫流式計(jì)算。目前,storm是比較成熟和流行的流式計(jì)算技術(shù),spark streaming則是另外一種基于批量計(jì)算的流式計(jì)算技術(shù)。所謂流式計(jì)算,就是指數(shù)據(jù)過來的時(shí)候立刻進(jìn)行處理,基本無延遲,但是不夠靈活,計(jì)算過的數(shù)據(jù)也不能回放,因此也無法替代上面說的數(shù)據(jù)倉(cāng)庫(kù)和離線計(jì)算技術(shù)。


4.    資源調(diào)度


綜上的所有東西都在同一個(gè)集群上運(yùn)行,需要達(dá)到一個(gè)有序工作的狀況。因此,需要一個(gè)資源調(diào)度系統(tǒng)來調(diào)度這些工作,MR2.0帶來的yarn就是負(fù)責(zé)此工作的一個(gè)框架。目前,docker on yarn,storm on yarn等on yarn技術(shù)的出現(xiàn)都得益于此框架,大大提高了大數(shù)據(jù)集群的資源使用率。此外,mesos也是另一種資源調(diào)度框架。


5.    協(xié)調(diào)服務(wù)


一個(gè)分布式系統(tǒng)能夠有條不紊的運(yùn)行離不開協(xié)調(diào)服務(wù)的功勞。不管是hadoop還是storm、kakfa等,都是需要通過zookeeper進(jìn)行協(xié)調(diào)的。zookeeper在分布式服務(wù)中扮演的角色就類似其字面意思-動(dòng)物園管理員,而大數(shù)據(jù)的各個(gè)組件就類似動(dòng)物園中的動(dòng)物們。


6.    集群監(jiān)控


集群的穩(wěn)定性對(duì)于一個(gè)數(shù)據(jù)系統(tǒng)是至關(guān)重要的。因此,集群監(jiān)控技術(shù)也是需要重點(diǎn)考慮的一點(diǎn)。目前,ganglia是對(duì)hadoop進(jìn)行監(jiān)控一個(gè)較好的工具。除了hadoop之外,ganglia也可以對(duì)kafka、zookeeper、storm等集群進(jìn)行監(jiān)控。當(dāng)然,只要支持jmx,任何集群都是可以通過ganglia進(jìn)行監(jiān)控的。


7.    數(shù)據(jù)可視化


最近幾年,數(shù)據(jù)可視化是一個(gè)很火的概念。尤其是大數(shù)據(jù)的可視化,考慮到高效、速度以及體驗(yàn)等等問題,并非是個(gè)很簡(jiǎn)單的事情。目前,百度開源的echarts是比較好的一個(gè)可視化前端解決方案,在大數(shù)據(jù)可視化方面支持的也比較好。


《大數(shù)據(jù):可擴(kuò)展實(shí)時(shí)系統(tǒng)的原理和最佳實(shí)踐》一書的作者將big data相關(guān)的開源項(xiàng)目做了以下分類:


  1. 批量計(jì)算系統(tǒng):延時(shí)較高、吞吐量大,如Hadoop。

  2. 序列化框架:為對(duì)象和字段提供一種模式定義語言,實(shí)現(xiàn)傳輸通信以及不同語言環(huán)境之間的轉(zhuǎn)化。如Thrift, Protocol Buffers, 和Avro。

  3. 支持任意存取的NoSQL數(shù)據(jù)庫(kù):犧牲了SQL強(qiáng)大的表現(xiàn)力優(yōu)勢(shì),根據(jù)應(yīng)用場(chǎng)景不同僅支持部分操作。按照CAP理論來說,就是犧牲C(一致性)或A(可用性)來實(shí)現(xiàn)AP或CP。如Cassandra, HBase, MongoDB,Voldemort, Riak, CouchDB等。

  4. 消息/排隊(duì)系統(tǒng):保證進(jìn)程之間以容錯(cuò)和異步的方式傳遞消息,在實(shí)時(shí)處理系統(tǒng)中非常重要。如Kestrel。

  5. 實(shí)時(shí)計(jì)算系統(tǒng):高吞吐、低延時(shí)的流處理系統(tǒng)。如Storm。


一般架構(gòu)


下圖為一個(gè)典型的大數(shù)據(jù)系統(tǒng)架構(gòu):



這里還需要提到的是Lambda架構(gòu)這個(gè)概念。Lambda架構(gòu)是由Storm的作者Nathan Marz提出的一個(gè)實(shí)時(shí)大數(shù)據(jù)處理框架。目標(biāo)是設(shè)計(jì)出一個(gè)能滿足實(shí)時(shí)大數(shù)據(jù)系統(tǒng)關(guān)鍵特性的架構(gòu),包括有:高容錯(cuò)、低延時(shí)和可擴(kuò)展等。Lambda架構(gòu)整合離線計(jì)算和實(shí)時(shí)計(jì)算,融合不可變性(Immunability),讀寫分離和復(fù)雜性隔離等一系列架構(gòu)原則,可集成Hadoop,Kafka,Storm,Spark,Hbase等各類大數(shù)據(jù)組件。




Lambda架構(gòu)是由三層組成:批處理層、服務(wù)層和速度層,總體可由query = function(alldata)這個(gè)公式來表示。


  • 批處理層:Hadoop是理想的批處理層工具。特點(diǎn)是延時(shí)較高、高吞吐量,并且是append-only(沒有delete和update的概念)的。包括對(duì)全部數(shù)據(jù)集的預(yù)計(jì)算。

  • 服務(wù)層:用于加載和顯示數(shù)據(jù)庫(kù)中的批處理視圖,以便用戶能夠查詢。可以使用Impala作為這一層的工具(使用Hive元數(shù)據(jù)指向HDFS中的一個(gè)表)。

  • 速度層:主要處理新數(shù)據(jù)和服務(wù)層更新造成的高延遲補(bǔ)償,利用流處理系統(tǒng)如 (Storm, Spark)計(jì)算實(shí)時(shí)視圖(HBase)。這些視圖有效期一直到它們已經(jīng)能通過批處理和服務(wù)層獲得時(shí)為止。


為了獲得一個(gè)完整結(jié)果,批處理和實(shí)時(shí)視圖都必須被同時(shí)查詢和融合(實(shí)時(shí)代表新數(shù)據(jù))。


當(dāng)然,架構(gòu)的引入是不能照本宣科的,還是需要根據(jù)實(shí)際情況進(jìn)行調(diào)整,以更好地適應(yīng)業(yè)務(wù)場(chǎng)景。


數(shù)據(jù)統(tǒng)計(jì)


數(shù)據(jù)統(tǒng)計(jì)是數(shù)據(jù)首當(dāng)其沖的一個(gè)作用。關(guān)于數(shù)據(jù)統(tǒng)計(jì),有以下幾個(gè)關(guān)鍵點(diǎn):


  • 數(shù)據(jù)統(tǒng)計(jì)是業(yè)務(wù)導(dǎo)向的,需要和數(shù)據(jù)分析師、運(yùn)營(yíng)、市場(chǎng)等需求方做好充分的溝通,且很關(guān)鍵的一點(diǎn)要區(qū)分清楚哪些是真正的需求,哪些僅僅是臨時(shí)需求,對(duì)于前者需要以對(duì)待產(chǎn)品的態(tài)度去對(duì)待,后者則一過性產(chǎn)生結(jié)果即可。


  • 數(shù)據(jù)統(tǒng)計(jì)一般來說都是pv、uv這些累加指標(biāo)。使用數(shù)據(jù)庫(kù)自帶的累加器即可,如hbase/redis的incr。


  • 數(shù)據(jù)統(tǒng)計(jì)在牽扯到用戶、IP時(shí),有些業(yè)務(wù)是需要去重的。去重的方案有bitmap、bloomfilter等,其中,redis的hyperloglog在容許一定誤差的情況下使用比較廣泛。


  • 用戶統(tǒng)計(jì)中的用戶質(zhì)量模型是比較復(fù)雜的一個(gè)地方。這個(gè)地方需要一定的建模,才能做到更好的判斷一個(gè)用戶的質(zhì)量。通常,把一個(gè)新增用戶一周內(nèi)以及一周后的活躍情況作為這個(gè)用戶質(zhì)量的判別標(biāo)準(zhǔn)。


個(gè)性化推薦


由于個(gè)性化推薦是“機(jī)器學(xué)習(xí)”的典型應(yīng)用,因此這里首先要講一下“機(jī)器學(xué)習(xí)”。


機(jī)器學(xué)習(xí)是為了讓機(jī)器具有人的學(xué)習(xí)能力,目的是建模隱藏的數(shù)據(jù)結(jié)構(gòu),然后做識(shí)別、預(yù)測(cè)、分類等。大多數(shù)情況下,這相當(dāng)于將一組數(shù)據(jù)傳遞給算法,并由算法判斷出與這些數(shù)據(jù)的屬性相關(guān)的信息,借助這些信息可以預(yù)測(cè)出未來有可能出現(xiàn)的其他數(shù)據(jù)。對(duì)于機(jī)器學(xué)習(xí)廣泛的一個(gè)定義是“利用經(jīng)驗(yàn)來改善計(jì)算機(jī)系統(tǒng)自身的性能”,而計(jì)算機(jī)中的經(jīng)驗(yàn)都是以數(shù)據(jù)的形式存在的。機(jī)器學(xué)習(xí)的一個(gè)典型過程就是機(jī)器利用它所認(rèn)定的出現(xiàn)于數(shù)據(jù)中的重要特征對(duì)數(shù)據(jù)進(jìn)行“訓(xùn)練”,并借此得到一個(gè)模型。


此外,與機(jī)器學(xué)習(xí)相關(guān)的還有幾個(gè)名詞會(huì)被混淆或者概念不清。


  1. 集體智慧:簡(jiǎn)稱集智,它是一種共享的或群體的智能。百度百科、維基百科、百度知道、豬八戒網(wǎng)等都是目前使用集體智慧的一種形式;數(shù)據(jù)挖掘、機(jī)器學(xué)習(xí)同樣需要大量群體的數(shù)據(jù)才能做出計(jì)算,是使用集體智慧的另一種形式。


  2. 數(shù)據(jù)挖掘:數(shù)據(jù)挖掘就是試圖從海量數(shù)據(jù)中找出有用的信息。數(shù)據(jù)挖掘支撐技術(shù)包含了機(jī)器學(xué)習(xí)、數(shù)據(jù)庫(kù)、統(tǒng)計(jì)學(xué)等。其中,數(shù)據(jù)庫(kù)提供數(shù)據(jù)管理技術(shù),機(jī)器學(xué)習(xí)和統(tǒng)計(jì)學(xué)提供了數(shù)據(jù)分析技術(shù)。但是由于機(jī)器學(xué)習(xí)并不以大數(shù)據(jù)作為處理對(duì)象,因此數(shù)據(jù)挖掘要對(duì)算法進(jìn)行改造,使得算法性能和空間占用達(dá)到實(shí)用的地步。


  3. 模式識(shí)別:模式識(shí)別是一種目的。傳統(tǒng)的模式識(shí)別的方法一般分為兩種:統(tǒng)計(jì)方法和句法方法。句法分析一般是不可學(xué)習(xí)的,而統(tǒng)計(jì)分析則是發(fā)展了不少機(jī)器學(xué)習(xí)的方法。因此機(jī)器學(xué)習(xí)給模式識(shí)別提供了數(shù)據(jù)分析技術(shù)。當(dāng)然,也就是因?yàn)閹缀跛械姆请S機(jī)數(shù)據(jù)都會(huì)包含這樣或者那樣的“模式(pattern)”,才使得機(jī)器學(xué)習(xí)的預(yù)測(cè)是可能的。


總之,機(jī)器學(xué)習(xí)也是使用數(shù)據(jù)的一個(gè)很關(guān)鍵的領(lǐng)域,典型應(yīng)用有個(gè)性化推薦、CTR預(yù)估、模式識(shí)別等。牽扯到的算法、技術(shù)非常多。如此部分開頭所說,其中的個(gè)性化推薦是應(yīng)用最廣泛的領(lǐng)域,用到了很多機(jī)器學(xué)習(xí)相關(guān)技術(shù)。


從本質(zhì)上看,個(gè)性化推薦和大家接觸很普遍的搜索引擎是一樣的,同樣是為了解決信息過載的問題。搜索引擎某種意義上也是一個(gè)個(gè)性化推薦系統(tǒng),其輸入特征是從搜索關(guān)鍵字可以直接得到的。而個(gè)性化推薦中,輸入特征則是需要使用機(jī)器學(xué)習(xí)相關(guān)技術(shù)才能得到。


個(gè)性化推薦系統(tǒng)一般由日志系統(tǒng)、推薦算法、內(nèi)容展示UI三部分組成。


  • 日志系統(tǒng):這是推薦系統(tǒng)的輸入源,是一個(gè)推薦系統(tǒng)所有信息的源頭。

  • 推薦算法:這是推薦系統(tǒng)的核心,根據(jù)輸入數(shù)據(jù)得出最終的推薦結(jié)果的具體過程就在這里。

  • 內(nèi)容展示UI:對(duì)于推薦結(jié)果如何展示,也是一個(gè)值得權(quán)衡的地方。以更好地滿足推薦系統(tǒng)的目標(biāo),并能更好的收集用戶的行為信息等。


其中,個(gè)性化推薦中最為核心的推薦算法,目前比較流行的有以下幾種:


  • 基于內(nèi)容的推薦:根據(jù)內(nèi)容本身的屬性(特征向量)所作的推薦。

  • 基于關(guān)聯(lián)規(guī)則的推薦:“啤酒與尿布”的方式,是一種動(dòng)態(tài)的推薦,能夠?qū)崟r(shí)對(duì)用戶的行為作出推薦。

  • 協(xié)同過濾推薦:與基于關(guān)聯(lián)規(guī)則的推薦相比是一種靜態(tài)方式的推薦,是根據(jù)用戶已有的歷史行為作分析的基礎(chǔ)上做的推薦。可分為物品協(xié)同過濾、用戶協(xié)同過濾、基于模型的協(xié)同過濾。其中,基于模型的協(xié)同又可以分為以下幾種類型:基于距離的協(xié)同過濾;基于矩陣分解的協(xié)同過濾,即Latent Factor Model(SVD);基于圖模型協(xié)同,即Graph,也叫社會(huì)網(wǎng)絡(luò)圖模型。


個(gè)性化推薦系統(tǒng)的典型架構(gòu)如下圖所示:



在線業(yè)務(wù)系統(tǒng)的日志接入數(shù)據(jù)高速公路,再由數(shù)據(jù)高速公路迅速運(yùn)轉(zhuǎn)到離線數(shù)據(jù)處理平臺(tái)和在線流計(jì)算平臺(tái);離線數(shù)據(jù)處理平臺(tái)周期性地以批處理方式加工過去一段時(shí)間的數(shù)據(jù),得到人群標(biāo)簽和其他模型參數(shù),存放在高速緩存中,供在線業(yè)務(wù)系統(tǒng)使用,與此同時(shí),在線流計(jì)算平臺(tái)實(shí)時(shí)對(duì)線上的日志數(shù)據(jù)做處理,對(duì)離線計(jì)算出的數(shù)據(jù)進(jìn)行補(bǔ)充、修正等;在線業(yè)務(wù)系統(tǒng)綜合離線特征和在線特征使用一定的邏輯得到輸出供業(yè)務(wù)使用,產(chǎn)生的日志流入數(shù)據(jù)高速公路。


基于此框架,個(gè)性化推薦系統(tǒng)的典型流程如下:



其他更為詳細(xì)的,個(gè)性化推薦牽扯到的算法、細(xì)節(jié)還有很多,留待后續(xù)推薦系統(tǒng)相關(guān)文章中再談。


總結(jié)


無論是互聯(lián)網(wǎng)還是其他領(lǐng)域的產(chǎn)品,數(shù)據(jù)的作用正變得越來越重要。綜合來看,數(shù)據(jù)統(tǒng)計(jì)和機(jī)器學(xué)習(xí)/個(gè)性化推薦是目前最關(guān)鍵的使用數(shù)據(jù)的領(lǐng)域。基于具體的需求,搭建合適的數(shù)據(jù)系統(tǒng)是解決問題的關(guān)鍵。其中,大數(shù)據(jù)是在應(yīng)對(duì)大規(guī)模數(shù)據(jù)的情況下合適的技術(shù)選型架構(gòu)。


版權(quán)申明:內(nèi)容來源網(wǎng)絡(luò),版權(quán)歸原創(chuàng)者所有。除非無法確認(rèn),我們都會(huì)標(biāo)明作者及出處,如有侵權(quán)煩請(qǐng)告知,我們會(huì)立即刪除并表示歉意。謝謝。


-END-


架構(gòu)文摘

ID:ArchDigest

互聯(lián)網(wǎng)應(yīng)用架構(gòu)丨架構(gòu)技術(shù)丨大型網(wǎng)站丨大數(shù)據(jù)丨機(jī)器學(xué)習(xí)

更多精彩文章,請(qǐng)點(diǎn)擊下方:閱讀原文

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    中文字幕日韩精品人一妻| 欧美日韩中黄片免费看| 色婷婷中文字幕在线视频| 隔壁的日本人妻中文字幕版| 成人你懂的在线免费视频| 91久久精品国产成人| 亚洲最大的中文字幕在线视频| 色婷婷国产精品视频一区二区保健| 99热在线精品视频观看| 亚洲av一区二区三区精品| 成年人视频日本大香蕉久久| 欧美在线观看视频免费不卡| 久久精品视频就在久久| 韩国日本欧美国产三级 | 日韩三级黄色大片免费观看 | 人妻内射精品一区二区| 欧美日韩国产二三四区| 日韩精品少妇人妻一区二区| 亚洲永久一区二区三区在线| 亚洲一区二区三区四区性色av| 极品少妇一区二区三区精品视频| 视频一区中文字幕日韩| 成人国产激情福利久久| 中文字幕不卡欧美在线| 成人国产激情在线视频| 91在线爽的少妇嗷嗷叫| 开心五月激情综合婷婷色| 好吊日成人免费视频公开| 日韩黄色大片免费在线| 日韩熟妇人妻一区二区三区| 福利一区二区视频在线| 欧美午夜伦理在线观看| 亚洲综合激情另类专区老铁性| 欧美一区日韩二区亚洲三区| 欧美午夜一级艳片免费看| 一区二区三区日韩中文| 午夜精品国产精品久久久| 91偷拍视频久久精品| 精品视频一区二区不卡| 国产高清在线不卡一区| 久久女同精品一区二区|