前言 記得幾年前,曾經(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ù)。
能用來干什么?-數(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ù)庫(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ù)。
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ù)就不是一般架構(gòu)可以解決的了的了。 大數(shù)據(jù) 麥肯錫的《大數(shù)據(jù):創(chuàng)新、競(jìng)爭(zhēng)和生產(chǎn)力的下一個(gè)前沿領(lǐng)域》中對(duì)大數(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)目做了以下分類:
一般架構(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è)公式來表示。
為了獲得一個(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):
個(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ì)被混淆或者概念不清。
總之,機(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三部分組成。
其中,個(gè)性化推薦中最為核心的推薦算法,目前比較流行的有以下幾種:
個(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)擊下方:閱讀原文 |
|