隨著互聯(lián)網(wǎng)信息化應用的普及,越來越多的企業(yè)和機構擁有海量數(shù)據(jù)。這些數(shù)據(jù)的采集和分析大多依托于大數(shù)據(jù)平臺。數(shù)據(jù)從采集到分析最后再形成結果以及可視化模型,中間經(jīng)歷復雜的大數(shù)據(jù)處理過程。下面主要介紹大數(shù)據(jù)處理的基本過程和方法,以及當前普適的大數(shù)據(jù)平臺。
大數(shù)據(jù)處理的過程一般分為4個步驟。
1. 數(shù)據(jù)采集
數(shù)據(jù)采集,主要是指通過某種方式搜集數(shù)據(jù)并存入數(shù)據(jù)庫中,并且用戶可以通過數(shù)據(jù)庫進行簡單的查詢和處理工作。例如,電商平臺使用傳統(tǒng)的關系型數(shù)據(jù)庫(MySQL、Oracle等)存儲每一筆事務數(shù)據(jù),或采用Redis或MongoDB等NoSQL類型的數(shù)據(jù)庫。下面介紹幾種常見的數(shù)據(jù)采集方法。
?。?)系統(tǒng)日志采集方法
大型的互聯(lián)網(wǎng)企業(yè)一般都會開發(fā)自己的數(shù)據(jù)采集工具,大多用于日志數(shù)據(jù)的采集。如Hadoop的Chukwa、Cloudera的Flume、Facebook的Scribe等,這些工具均采用分布式架構,能滿足每秒數(shù)百兆字節(jié)的日志數(shù)據(jù)采集和傳輸需求。
?。?)網(wǎng)絡數(shù)據(jù)采集方法
網(wǎng)絡數(shù)據(jù)采集是指通過網(wǎng)絡爬蟲或網(wǎng)站公開API等方式從網(wǎng)站上獲取數(shù)據(jù)信息。該方法可以將非結構化數(shù)據(jù)從網(wǎng)頁中抽取出來,將其存儲為統(tǒng)一的本地數(shù)據(jù)文件,并以結構化的方式存儲。它支持圖片、音頻、視頻等文件或附件的采集,附件與正文可以自動關聯(lián)。
?。?)特定的數(shù)據(jù)采集方法
對于企業(yè)生產(chǎn)經(jīng)營數(shù)據(jù)或?qū)W科研究數(shù)據(jù)等保密性要求較高的數(shù)據(jù),可以通過與企業(yè)或研究機構合作,使用特定系統(tǒng)接口等相關方式采集數(shù)據(jù);也可采用特定的傳感器獲取指定的數(shù)據(jù),再加密傳輸?shù)綌?shù)據(jù)庫中。
2. 數(shù)據(jù)預處理
由于數(shù)據(jù)搜集途徑多樣、數(shù)據(jù)種類繁多,采集的數(shù)據(jù)具有多源異構特性,并且同時存在數(shù)據(jù)不完整、有噪聲、不一致等情況。因此,將搜集的數(shù)據(jù)進行統(tǒng)計分析或利用數(shù)據(jù)挖掘算法建模,均需要數(shù)據(jù)清洗,即統(tǒng)一數(shù)據(jù)格式、提高數(shù)據(jù)質(zhì)量,進而提升數(shù)據(jù)挖掘效果。
數(shù)據(jù)預處理的方法主要包括:數(shù)據(jù)清洗,用于去除噪聲數(shù)據(jù);數(shù)據(jù)集成,將多個數(shù)據(jù)源中的數(shù)據(jù)融合集中到一致的數(shù)據(jù)存儲中;數(shù)據(jù)變換,把原始數(shù)據(jù)轉換成為適合數(shù)據(jù)挖掘的形式;數(shù)據(jù)規(guī)約,包括數(shù)據(jù)聚類、維度歸約、數(shù)據(jù)壓縮、數(shù)值歸約、離散量化等。
3. 數(shù)據(jù)統(tǒng)計分析
統(tǒng)計與分析主要利用分布式數(shù)據(jù)庫,或分布式計算集群來匯總分析海量數(shù)據(jù),以滿足后續(xù)的數(shù)據(jù)挖掘需求。常見的結構化關系數(shù)據(jù)實時統(tǒng)計分析工具,包括 EMC 的 GreenPlum、Oracle的Exadata,以及基于MySQL的列式存儲Infobright等;而其他半結構化數(shù)據(jù)處理或非關系型批處理等則可應用Hadoop。
4. 數(shù)據(jù)挖掘與機器學習
在數(shù)據(jù)統(tǒng)計分析的基礎上,數(shù)據(jù)挖掘通過對數(shù)據(jù)實施高級分析與建模運算,借助機器學習模型,最終形成數(shù)據(jù)處理的智能決策。代表性的數(shù)據(jù)挖掘算法有K-means 聚類、SVM 預測、Na?ve Bayes分類等,大數(shù)據(jù)挖掘的集成平臺有Hadoop的Mahout等。自AlphaGo問世以來,深度學習開始應用到各行各業(yè)的大數(shù)據(jù)領域,Google 推出的深度學習集成平臺TensorFlow,極大降低了大數(shù)據(jù)應用深度學習的門檻。
諸如淘寶、12306 等大平臺的并發(fā)量極大,采用分布式大數(shù)據(jù)架構。當前常用的大數(shù)據(jù)分布式平臺主要有Hadoop和Spark。
Apache Hadoop是一款支持數(shù)據(jù)密集型分布式集群計算應用開源軟件框架,基于Google公司提出的MapReduce和GFS文件系統(tǒng)。Hadoop框架可為應用提供透明可靠的數(shù)據(jù)分布式處理,即MapReduce編程范式:應用程序被分區(qū)成許多小部分,每個部分都能在集群中的任意節(jié)點上運行。同時,Hadoop 還提供了分布式文件系統(tǒng),用以存儲所有計算節(jié)點的數(shù)據(jù)。MapReduce和分布式文件系統(tǒng)的設計,使Hadoop框架能夠自動處理節(jié)點故障,應用程序能與成千上萬具有獨立運算的計算機共享數(shù)據(jù)。整個Apache Hadoop平臺包括Hadoop內(nèi)核、MapReduce、Hadoop分布式文件系統(tǒng)(HDFS),以及Hive、HBase等數(shù)據(jù)處理工具。
Apache Spark也是一個開源簇運算框架,最初由加州大學伯克利分校的AMPLab開發(fā)。Hadoop的MapReduce節(jié)點需在運行完任務后將數(shù)據(jù)存放到磁盤中,Spark則使用了存儲器內(nèi)存運算技術,能在數(shù)據(jù)尚未寫入硬盤時即在存儲器內(nèi)完成運算。Spark 在存儲器內(nèi)運行程序的速度比MapReduce 的運算速度快 100 多倍,即便在硬盤上運行程序,Spark 也能比MapReduce快10倍以上。Spark允許用戶將數(shù)據(jù)加載至簇存儲器,并多次對其進行查詢,尤其適合用于機器學習算法。
Spark支持獨立模式(本地Spark簇)、Hadoop YARN或Apache Mesos的簇管理模式,可以和HDFS、Cassandra、OpenStack Swift和Amazon S3等分布式存儲系統(tǒng)對接。Spark也支持偽分布式(Pseudo-Distributed)本地模式,不過通常只用于開發(fā)或測試時以本機文件系統(tǒng)替換分布式存儲系統(tǒng)。