漫談大數(shù)據(jù)之中篇
前言
上次作者分享了大數(shù)據(jù)的前序,本次和下次將繼續(xù)為讀者分享大數(shù)據(jù)方面的拙見。從大數(shù)據(jù)的定義、發(fā)展歷程,到大數(shù)據(jù)VS小數(shù)據(jù)、大數(shù)據(jù)通用技術(shù),最后從安全行業(yè)大數(shù)據(jù)的角度,漫談大數(shù)據(jù)相關(guān)概念及其在應(yīng)用實(shí)踐中的一些思考,同時(shí)分享大數(shù)據(jù)在流量分析和日志的簡單實(shí)踐,期望能給讀者帶來對(duì)大數(shù)據(jù)一個(gè)更好的認(rèn)知和應(yīng)用。
上次前篇漫談大數(shù)據(jù)的定義、發(fā)展歷程,中篇我們將從大數(shù)據(jù)VS小數(shù)據(jù)、以及大數(shù)據(jù)通用技術(shù)簡要的介紹對(duì)大數(shù)據(jù)方面的理解。
小數(shù)據(jù) VS 大數(shù)據(jù)
先舉個(gè)簡單例子吧,比如學(xué)生成績管理系統(tǒng),在不同的情況下這個(gè)系統(tǒng)的架構(gòu)是完全不同的。下面分三種情形討論:
(1)如果僅僅做一個(gè)班級(jí)的學(xué)生成績管理,那么最簡單的方法是采用一個(gè)EXCEL,然后利用一些EXCEL分析的函數(shù)等對(duì)成績進(jìn)行管理、排序、查找和保存等操作。打開EXCEL,把成績錄入即OK,多簡單高效,一目了然,用EXCEL也可以導(dǎo)出很多數(shù)據(jù)分析的報(bào)表,一個(gè)EXCEL的中高手絕對(duì)能搞定這簡單的需求。
(2)如果是管理一個(gè)學(xué)校的成績呢,那如果還用EXCEL來管理,估計(jì)需要很多的EXCEL統(tǒng)計(jì)信息。不僅需要的量多,那如果兩個(gè)班級(jí)進(jìn)行橫向比較怎么辦?如果按照某科目進(jìn)行縱向排名怎么辦?顯然用EXCEL不是最好的解決方案了,就算EXCEL的高手也望塵莫及,那就需要我們學(xué)習(xí)IT剛剛畢業(yè)的小菜鳥四兩撥千斤,一個(gè)簡單的數(shù)據(jù)庫就搞定了。猶記得當(dāng)年在那個(gè)小機(jī)房,用著純平的顯示器,拿著上機(jī)卡,運(yùn)用SQL SERVER 2000和Visual C++6.0,靈活應(yīng)用成績錄入、查詢和保存等按鈕的學(xué)生成績管理系統(tǒng),一切搞定!
(3)當(dāng)然,往往事情沒那么簡單,永遠(yuǎn)也沒有一切搞定的時(shí)候,如果用當(dāng)前互聯(lián)網(wǎng)的思維,我們要管理的不僅僅是一個(gè)學(xué)校的成績,我們要管理整個(gè)省各大高校的成績,甚至全國各大高校的成績,如果思維再發(fā)散一些,我們要做個(gè)系統(tǒng),不僅僅是管理學(xué)生的成績,我們還想要通過學(xué)生平時(shí)的作業(yè)情況,上課考勤情況,以及學(xué)生在社交網(wǎng)絡(luò)上的所有相關(guān)信息以及所喜歡的電影,興趣愛好等去綜合分析預(yù)測這個(gè)學(xué)生本學(xué)期的成績,那怎么辦?這里,我們不僅僅簡單的存結(jié)構(gòu)化的成績信息了,數(shù)據(jù)的來源更加多源,需要分析的數(shù)據(jù)更加多元化,并且數(shù)據(jù)量和數(shù)據(jù)組織形式讓SQL SERVER和ORACLE無法存儲(chǔ)處理和查詢。比如由于數(shù)據(jù)量太大用ORACLE查詢十分鐘都無法返回結(jié)果。那么,我們需要大數(shù)據(jù)技術(shù),采取新的數(shù)據(jù)架構(gòu)體系來管理分析這些數(shù)據(jù),這也是何謂大數(shù)據(jù)中所談到的。
這就是所謂的小數(shù)據(jù)和大數(shù)據(jù)。小數(shù)據(jù)(量),采用傳統(tǒng)的關(guān)系型數(shù)據(jù)庫處理起來更為簡單高效,比如情形1和情形2。大數(shù)據(jù)(量),采用傳統(tǒng)的數(shù)據(jù)庫無法處理,那只能用大數(shù)據(jù)的技術(shù)架構(gòu)去分析處理,比如情形3。那是否可以用大數(shù)據(jù)的技術(shù)處理小數(shù)據(jù)呢,當(dāng)然可以。但是,不是很好的解決方案。首先,系統(tǒng)越復(fù)雜,所要處理的問題越多,不僅僅實(shí)現(xiàn)上困難,而且在維護(hù)也舉步維艱。其次,采用大數(shù)據(jù)的技術(shù)不會(huì)帶來更好更高效的結(jié)果,相反,小數(shù)據(jù)采用傳統(tǒng)的關(guān)系型數(shù)據(jù)庫,無論技術(shù)還是實(shí)現(xiàn)方式更為成熟,數(shù)據(jù)查詢分析的速度更為高效。打蚊子用高射炮浪費(fèi)資源不說,而且不一定好使,還不如一個(gè)打蚊拍來的更為合適。
當(dāng)然,上面大數(shù)據(jù)與小數(shù)據(jù)的討論主要體現(xiàn)在數(shù)據(jù)量和處理方式方面,更核心的大數(shù)據(jù)和小數(shù)據(jù)有很多內(nèi)容。《大數(shù)據(jù)時(shí)代》作者維克托•舍恩伯格提出了大數(shù)據(jù)三原則:要全體不要抽樣、要效率不要精確、要相關(guān)不要因果。從中可以看出,大數(shù)據(jù)時(shí)代的核心特征是相關(guān)性,其特點(diǎn)是全量、多元、數(shù)據(jù)價(jià)值密度低等。而小數(shù)據(jù)應(yīng)該指采用調(diào)查方法獲得的抽樣數(shù)據(jù)或者是結(jié)構(gòu)化的海量數(shù)據(jù),通常采用傳統(tǒng)的統(tǒng)計(jì)分析方法,往往依托數(shù)理統(tǒng)計(jì)的大數(shù)定律,描述抽樣理論下樣本最終服從中心極限定理的正態(tài)分布理論,強(qiáng)調(diào)描述性統(tǒng)計(jì)學(xué)和推斷統(tǒng)計(jì)學(xué)。兩者之間的對(duì)比可以簡略的概括為:大數(shù)據(jù)重預(yù)測、發(fā)現(xiàn)、相關(guān)、全體、感知;對(duì)應(yīng)的小數(shù)據(jù)重解釋、實(shí)證、因果、抽樣、精確。從這也可以看出,大數(shù)據(jù)與小數(shù)據(jù)沒有孰好孰壞,在做好大數(shù)據(jù)的基礎(chǔ)上,能夠提取具有鮮明特征,具有高密度價(jià)值的小數(shù)據(jù),從個(gè)體角度量身定做,進(jìn)行更加精準(zhǔn)的個(gè)性化推薦和預(yù)測,也是極好的。

大數(shù)據(jù)包含哪些技術(shù)?
大數(shù)據(jù)包含哪些技術(shù)呢?引入楊義先老師的最新力作《安全簡史》里面的例子,咱們先看看大數(shù)據(jù)產(chǎn)業(yè)和垃圾處理回收產(chǎn)業(yè)。
通俗的說,大數(shù)據(jù)產(chǎn)業(yè),無論從工作原理、原料結(jié)構(gòu),還是從利潤率等方面來看,能夠與大數(shù)據(jù)產(chǎn)業(yè)相比擬的,也許只有垃圾處理和廢品回收!

廢品收購和垃圾收集,算是“數(shù)據(jù)收集”;將廢品和垃圾送往集中處理工場,算是“數(shù)據(jù)集成”;將廢品和垃圾初步分類,算是“數(shù)據(jù)規(guī)約”;將廢品和垃圾適當(dāng)清潔和整理,算是“數(shù)據(jù)清理”;將破沙發(fā)拆成木、鐵、皮等原料,算是“數(shù)據(jù)變換”;認(rèn)真分析如何將這些原料賣個(gè)好價(jià)值,算是“數(shù)據(jù)挖掘”;不斷總結(jié)經(jīng)驗(yàn),選擇并固定上下游賣家和買家,算是“模式評(píng)估”;把這些技巧整理成口訣,算是“知識(shí)表示”!
再看原料結(jié)構(gòu)。與大數(shù)據(jù)的異構(gòu)特性一樣,生活垃圾、工作垃圾、建筑垃圾、可回收垃圾和不可回收垃圾等,無論從外形、質(zhì)地,還是從內(nèi)涵等方面來看,也都是完全不同的。與大數(shù)據(jù)一樣,垃圾的數(shù)量也很多,產(chǎn)生的速度也很快,處理起來也很困難。
最后來看利潤率。確實(shí)有人曾在紐約路邊的垃圾袋里,一分錢不花就撿到了價(jià)值百萬美元的,墨西哥著名畫家魯菲諾·塔馬約的代表作《三人行》。而從廢品中掏出寶貝,更是家常便飯。即使不考慮這些“天上掉下來的餡餅”,就算將收購的易拉罐轉(zhuǎn)手賣掉,也勝過鋁礦利潤率;將舊家具拆成木材和皮料,其利潤率也遠(yuǎn)遠(yuǎn)高于木材商和皮貨商;總之,只要垃圾專家們?cè)敢庹J(rèn)真分撿,那么,他們的利潤率可以超過任何相關(guān)行業(yè)。與垃圾專家一樣,大數(shù)據(jù)專家也能將數(shù)據(jù)(廢品)中挖掘出的旅客出行規(guī)律賣給航空公司,將某群體的消費(fèi)習(xí)慣賣給百貨商店,將網(wǎng)絡(luò)輿情賣給相關(guān)的需求方等等,總之,大數(shù)據(jù)專家完全可以“一菜多吃”,反復(fù)賣錢,不斷“冶金”,而且一次更比一次賺錢,時(shí)間越久,價(jià)值越大。
言歸正傳,和傳統(tǒng)數(shù)據(jù)處理類似,大數(shù)據(jù)技術(shù)主要包括:數(shù)據(jù)采集、數(shù)據(jù)傳輸、數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)查詢、數(shù)據(jù)分析和數(shù)據(jù)可視化。只是,由于數(shù)據(jù)量以及數(shù)據(jù)的多源異構(gòu),每一個(gè)都是一個(gè)非常復(fù)雜的系統(tǒng),比如說從一個(gè)位置向另外一個(gè)位置進(jìn)一步傳輸數(shù)據(jù)的數(shù)據(jù)是比較簡單的,但對(duì)大量數(shù)據(jù)就是非常復(fù)雜的問題了,這些都需要非常先進(jìn)的技術(shù)才能夠解決。比如怎么保證海量數(shù)據(jù)的傳輸速度?怎么保證海量數(shù)據(jù)的不丟失?怎么保證不同的模型所選取數(shù)據(jù)全集中所需要的子集?怎么保證數(shù)據(jù)產(chǎn)生源產(chǎn)生的海量數(shù)據(jù)毫無壓力的全部存儲(chǔ)到磁盤或者文件系統(tǒng)?這些都是大數(shù)據(jù)技術(shù)中需要解決的問題。那么問題來了,當(dāng)前大數(shù)據(jù)包含哪些技術(shù),每種技術(shù)有哪些相應(yīng)的解決方案?
這個(gè)問題的回答就沒有那么容易了,一兩句話也討論不清楚。借用QCon 2016(QCon是由InfoQ主辦的全球頂級(jí)技術(shù)盛會(huì))分享的內(nèi)容,這里以偏蓋全大概介紹一下。
對(duì)數(shù)據(jù)的管理和查詢分析大概包括這些步驟,數(shù)據(jù)的傳輸,數(shù)據(jù)的處理,數(shù)據(jù)的存儲(chǔ)和數(shù)據(jù)的查詢,每個(gè)過程包括不同的組件去實(shí)現(xiàn)各自的功能。
(1)數(shù)據(jù)傳輸
在數(shù)據(jù)傳輸領(lǐng)域可以說通用的標(biāo)準(zhǔn)式的組件有Kafka(由Apache軟件基金會(huì)開發(fā)的一個(gè)開源流處理平臺(tái))。目前我們做大數(shù)據(jù)安全分析平臺(tái)的數(shù)據(jù)傳輸也是kafka。它提供了資源的分區(qū),把生產(chǎn)數(shù)據(jù)和消費(fèi)數(shù)據(jù)直接分開,現(xiàn)在這個(gè)架構(gòu)是根據(jù)分布式邏輯來進(jìn)行的,你可以從分布式邏輯上來收集數(shù)據(jù),這是一個(gè)非常好的描述數(shù)據(jù)的一個(gè)方式。
此外,MQ(Message Queue消息隊(duì)列,用于上下游傳遞消息)也是提取數(shù)據(jù)的系統(tǒng),它和Kafka不完全一樣,這兩個(gè)架構(gòu)有些不同,不同的架構(gòu),不同的結(jié)構(gòu)可以產(chǎn)生不同范圍,不同規(guī)模的表現(xiàn)性能,以提升不同的操作性能。
(2)數(shù)據(jù)處理
數(shù)據(jù)處理又分為離線處理、在線處理、流式處理。這里僅簡單的對(duì)比一下基于文件系統(tǒng)、基于內(nèi)存和流式處理三種方式。
如圖所示,第一種是類似于MapReduce的基于Hadoop的批處理技術(shù),他主要通過磁盤和網(wǎng)絡(luò)移動(dòng)數(shù)據(jù),每次數(shù)據(jù)處理之后的結(jié)果存入磁盤。這種處理方式有很大的局限性,因?yàn)橐疟P讀取,并通過網(wǎng)絡(luò)傳輸,處理速度就相對(duì)來慢,比較適合于離線的批處理。
第二種方式是在最近幾年當(dāng)中非常流行的Spark的工作方式就是考慮你的處理過程,將它想象成一個(gè)過程或者一個(gè)舞臺(tái),Spark做的就是非常有效地利用內(nèi)存,每一個(gè)計(jì)算過程都會(huì)輸出一個(gè)結(jié)果,Spark會(huì)把這些結(jié)果做一個(gè)統(tǒng)計(jì),這種工作的方法是迭代式的,而且是非常高效的迭代式。Spark會(huì)把所有的數(shù)據(jù)都進(jìn)行統(tǒng)一的整理,而且Spark比Hadoop的API更加有優(yōu)勢(shì),同時(shí)Spark的MLIB集成了大部分機(jī)器學(xué)習(xí)的算法,迭代式的內(nèi)存處理也非常適合算法的多次迭代求解。所以在過去幾年當(dāng)中,Spark幾乎慢慢地變成了批處理的標(biāo)配。
第三種方式是以Storm、Spark Streaming為主的流式處理框架。Hadoop的高吞吐,海量數(shù)據(jù)處理的能力使得人們可以方便地處理海量數(shù)據(jù)。但是,Hadoop不擅長實(shí)時(shí)計(jì)算,因?yàn)樗烊痪褪菫榕幚矶?。舉個(gè)搜索場景中的例子,當(dāng)一個(gè)賣家發(fā)布了一條寶貝信息時(shí),他希望的當(dāng)然是這個(gè)寶貝馬上就可以被賣家搜索出來、點(diǎn)擊、購買啦,相反,如果這個(gè)寶貝要等到第二天或者更久才可以被搜出來,估計(jì)這個(gè)大哥就要罵娘了。這是因?yàn)楹笈_(tái)系統(tǒng)做的是每天一次的全量處理,而且大多是在夜深人靜之時(shí)做的,那么你今天白天做的事情當(dāng)然要明天才能反映出來啦。而Storm令持續(xù)不斷的流計(jì)算變得容易,彌補(bǔ)了Hadoop批處理所不能滿足的實(shí)時(shí)要求。Storm經(jīng)常用于在實(shí)時(shí)分析、在線機(jī)器學(xué)習(xí)、持續(xù)計(jì)算、分布式遠(yuǎn)程調(diào)用和ETL(Extract-Transform-Load,用來描述將數(shù)據(jù)從來源端經(jīng)過抽取(Extract)、交互轉(zhuǎn)換(Transform)、加載(Load)至目的端的過程。)等領(lǐng)域。
(3)數(shù)據(jù)存儲(chǔ)
數(shù)據(jù)存儲(chǔ)這里簡單介紹基于Hadoop的技術(shù)擴(kuò)展和封裝,圍繞Hadoop衍生出相關(guān)的大數(shù)據(jù)技術(shù),應(yīng)對(duì)傳統(tǒng)關(guān)系型數(shù)據(jù)庫較難處理的數(shù)據(jù)和場景,例如針對(duì)非結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ)和計(jì)算等,充分利用Hadoop開源的優(yōu)勢(shì),伴隨相關(guān)技術(shù)的不斷進(jìn)步,其應(yīng)用場景也將逐步擴(kuò)大,目前最為典型的應(yīng)用場景就是通過擴(kuò)展和封裝Hadoop來實(shí)現(xiàn)對(duì)互聯(lián)網(wǎng)大數(shù)據(jù)存儲(chǔ)、分析的支撐。這里面有幾十種NoSQL技術(shù),也在進(jìn)一步的細(xì)分。對(duì)于非結(jié)構(gòu)、半結(jié)構(gòu)化數(shù)據(jù)處理、復(fù)雜的ETL流程、復(fù)雜的數(shù)據(jù)挖掘和計(jì)算模型,Hadoop平臺(tái)更擅長。
(4)數(shù)據(jù)查詢
SQL on Hadoop:很多SQL on Hadoop都支持SQL查詢的功能,SQL可以幫助你非常便捷得到想得到的數(shù)據(jù)。但是缺點(diǎn)是處理速度非常慢,因?yàn)橹虚g涉及到一些過程要從HDFS提取數(shù)據(jù),處理數(shù)據(jù),然后再放到存儲(chǔ)器當(dāng)中。這樣就會(huì)非常慢,如果需要快速反應(yīng)的話,這種小的延遲期的操作還需要進(jìn)一步的提升。所以我們就需要進(jìn)一步提高優(yōu)化存儲(chǔ)。
Key/Value Stores:另一種加速查詢速度的方法就是要把資料庫進(jìn)行優(yōu)化,這樣就能夠打造一種非常快速的查詢的架構(gòu)。它可以支持非常快速的查找,也可以進(jìn)行快速的寫入,我們有很多時(shí)間序列的數(shù)據(jù)庫都有鍵值存儲(chǔ)。
Column stores:你可以存儲(chǔ)并且掃描你的數(shù)據(jù),然后把這些數(shù)據(jù)進(jìn)行列存儲(chǔ),根據(jù)查詢的關(guān)鍵字,電腦可以快速查詢各個(gè)列,這樣的話你就可以在不同的列當(dāng)中創(chuàng)造不同的關(guān)鍵字,以及指標(biāo)。這是性能查詢方面非常大的進(jìn)步。
當(dāng)然,這里說的僅僅是帶入大家簡單的了解大數(shù)據(jù)處理的四項(xiàng)(大數(shù)據(jù)傳輸、處理、存儲(chǔ)、查詢)技術(shù)的基本概念,目的是讓大家對(duì)大數(shù)據(jù)技術(shù)不再那么陌生,但是這些如開始所說僅僅是一些基礎(chǔ)的需要,是一個(gè)以偏概全的概念,其中包含很多的開源框架去實(shí)現(xiàn)你的訴求,包含很多其他的問題需要去解決,比如:大數(shù)據(jù)的集群是怎么管理的?多源異構(gòu)的數(shù)據(jù)接入進(jìn)來用什么數(shù)據(jù)接入引擎,怎么保證多源異構(gòu)的數(shù)據(jù)進(jìn)行數(shù)據(jù)標(biāo)準(zhǔn)化的存儲(chǔ),以便進(jìn)一步的數(shù)據(jù)融合?大數(shù)據(jù)處理中的任務(wù)怎么調(diào)度?大數(shù)據(jù)平臺(tái)對(duì)外如何快速的進(jìn)行可視化分析和研究?大數(shù)據(jù)平臺(tái)的體系安全性怎么保證,不僅包括數(shù)據(jù)的安全,還包括平臺(tái)的安全…….太多的問題,而且每個(gè)問題其實(shí)也可以作為一個(gè)課題或者一個(gè)方向進(jìn)行深入的研究。
一個(gè)實(shí)用性能優(yōu)異的大數(shù)據(jù)平臺(tái)需要在實(shí)踐中慢慢完善,迭代開發(fā)而成,并且要結(jié)合具體的業(yè)務(wù)場景建立相應(yīng)的場景大數(shù)據(jù)解決方案,搭建適合自己的大數(shù)據(jù)分析平臺(tái),后續(xù)我們將從流量分析和日志分析上進(jìn)行具體舉例說明,敬請(qǐng)期待下周的終篇。
【本文為51CTO專欄作者“中國保密協(xié)會(huì)科學(xué)技術(shù)分會(huì)”原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)聯(lián)系原作者】