圖1 用于實時分析的MongoDB架構

MongoDB大集群目前存在一些穩定性問題,會發生周期性的寫堵塞和主從同步失效,但仍不失為一種潛力十足的可以用于高速數據分析的NoSQL。

此外,目前大多數服務廠商都已經推出了帶4GB以上SSD的解決方案,利用內存+SSD,也可以輕易達到內存分析的性能。隨著SSD的發展,內存數據分析必然能得到更加廣泛的應用。

BI級別指的是那些對于內存來說太大的數據量,但一般可以將其放入傳統的BI產品和專門設計的BI數據庫之中進行分析。目前主流的BI產品都有支持TB級以上的數據分析方案。種類繁多,就不具體列舉了。

海量級別指的是對于數據庫和BI產品已經完全失效或者成本過高的數據量。海量數據級別的優秀企業級產品也有很多,但基于軟硬件的成本原因,目前大多數互聯網企業采用Hadoop的HDFS分布式文件系統來存儲數據,并使用MapReduce進行分析。本文稍后將主要介紹Hadoop上基于 MapReduce的一個多維數據分析平臺。

數據分析的算法復雜度

根據不同的業務需求,數據分析的算法也差異巨大,而數據分析的算法復雜度和架構是緊密關聯的。舉個例子,Redis是一個性能非常高的內存Key-Value NoSQL,它支持List和Set、SortedSet等簡單集合,如果你的數據分析需求簡單地通過排序,鏈表就可以解決,同時總的數據量不大于內存 (準確地說是內存加上虛擬內存再除以2),那么無疑使用Redis會達到非常驚人的分析性能。

還有很多易并行問題(Embarrassingly Parallel),計算可以分解成完全獨立的部分,或者很簡單地就能改造出分布式算法,比如大規模臉部識別、圖形渲染等,這樣的問題自然是使用并行處理集群比較適合。

而大多數統計分析,機器學習問題可以用MapReduce算法改寫。MapReduce目前最擅長的計算領域有流量統計、推薦引擎、趨勢分析、用戶行為分析、數據挖掘分類器、分布式索引等。

面對大數據OLAP分析的一些問題

OLAP分析需要進行大量的數據分組和表間關聯,而這些顯然不是NoSQL和傳統數據庫的強項,往往必須使用特定的針對BI優化的數據庫。比如絕大多數針對BI優化的數據庫采用了列存儲或混合存儲、壓縮、延遲加載、對存儲數據塊的預統計、分片索引等技術。

Hadoop平臺上的OLAP分析,同樣存在這個問題,Facebook針對Hive開發的RCFile數據格式,就是采用了上述的一些優化技術,從而達到了較好的數據分析性能。如圖2所示。

面對大數據OLAP分析的一些問題

圖2 RCFile的行列混合存

然而,對于Hadoop平臺來說,單單通過使用Hive模仿出SQL,對于數據分析來說遠遠不夠,首先Hive雖然將HiveQL翻譯 MapReduce的時候進行了優化,但依然效率低下。多維分析時依然要做事實表和維度表的關聯,維度一多性能必然大幅下降。其次,RCFile的行列混合存儲模式,事實上限制死了數據格式,也就是說數據格式是針對特定分析預先設計好的,一旦分析的業務模型有所改動,海量數據轉換格式的代價是極其巨大的。最后,HiveQL對OLAP業務分析人員依然是非常不友善的,維度和度量才是直接針對業務人員的分析語言。

而且目前OLAP存在的最大問題是:業務靈活多變,必然導致業務模型隨之經常發生變化,而業務維度和度量一旦發生變化,技術人員需要把整個Cube(多維立方體)重新定義并重新生成,業務人員只能在此Cube上進行多維分析,這樣就限制了業務人員快速改變問題分析的角度,從而使所謂的BI系統成為死板的日常報表系統。

使用Hadoop進行多維分析,首先能解決上述維度難以改變的問題,利用Hadoop中數據非結構化的特征,采集來的數據本身就是包含大量冗余信息的。同時也可以將大量冗余的維度信息整合到事實表中,這樣可以在冗余維度下靈活地改變問題分析的角度。其次利用Hadoop MapReduce強大的并行化處理能力,無論OLAP分析中的維度增加多少,開銷并不顯著增長。換言之,Hadoop可以支持一個巨大無比的Cube,包含了無數你想到或者想不到的維度,而且每次多維分析,都可以支持成千上百個維度,并不會顯著影響分析的性能。

因此,我們的大數據分析架構在這個巨大Cube的支持下,直接把維度和度量的生成交給業務人員,由業務人員自己定義好維度和度量之后,將業務的維度和度量直接翻譯成 MapReduce運行,并最終生成報表??梢院唵卫斫鉃橛脩艨焖僮远x的“MDX”(多維表達式,或者多維立方體查詢)語言→MapReduce的轉換工具。同時OLAP分析和報表結果的展示,依然兼容傳統的BI和報表產品。如圖3所示。

面對大數據OLAP分析的一些問題

圖3 MDX→MapReduce簡略示意圖

圖3可以看出,在年收入上,用戶可以自己定義子維度。另外,用戶也可以在列上自定義維度,比如將性別和學歷合并為一個維度。由于Hadoop數據的非結構化特征,維度可以根據業務需求任意地劃分和重組。

一種Hadoop多維分析平臺的架構

整個架構由四大部分組成:數據采集模塊、數據冗余模塊、維度定義模塊、并行分析模塊。如圖4所示。

一種Hadoop多維分析平臺的架構

圖4 Hadoop多維分析平臺架構圖

數據采集模塊采用了Cloudera的Flume,將海量的小日志文件進行高速傳輸和合并,并能夠確保數據的傳輸安全性。單個collector宕機之后,數據也不會丟失,并能將agent數據自動轉移到其他的colllecter處理,不會影響整個采集系統的運行。如圖5所示。

一種Hadoop多維分析平臺的架構

圖5 采集模塊

數據冗余模塊不是必須的,但如果日志數據中沒有足夠的維度信息,或者需要比較頻繁地增加維度,則需要定義數據冗余模塊。通過冗余維度定義器定義需要冗余的維度信息和來源(數據庫、文件、內存等),并指定擴展方式,將信息寫入數據日志中。在海量數據下,數據冗余模塊往往成為整個系統的瓶頸,建議使用一些比較快的內存NoSQL來冗余原始數據,并采用盡可能多的節點進行并行冗余;或者也完全可以在Hadoop中執行批量Map,進行數據格式的轉化。

維度定義模塊是面向業務用戶的前端模塊,用戶通過可視化的定義器從數據日志中定義維度和度量,并能自動生成一種多維分析語言,同時可以使用可視化的分析器通過GUI執行剛剛定義好的多維分析命令。

并行分析模塊接受用戶提交的多維分析命令,并將通過核心模塊將該命令解析為Map-Reduce,提交給Hadoop集群之后,生成報表供報表中心展示。

核心模塊是將多維分析語言轉化為MapReduce的解析器,讀取用戶定義的維度和度量,將用戶的多維分析命令翻譯成MapReduce程序。核心模塊的具體邏輯如圖6所示。

圖6 核心模塊的邏輯

圖6中根據JobConf參數進行Map和Reduce類的拼裝并不復雜,難點是很多實際問題很難通過一個MapReduce Job解決,必須通過多個MapReduce Job組成工作流(WorkFlow),這里是最需要根據業務進行定制的部分。圖7是一個簡單的MapReduce工作流的例子。

圖7 MapReduce WorkFlow例子

MapReduce的輸出一般是統計分析的結果,數據量相較于輸入的海量數據會小很多,這樣就可以導入傳統的數據報表產品中進行展現。

結束語

當然,這樣的多維分析架構也不是沒有缺點。由于MapReduce本身就是以蠻力去掃描大部分數據進行計算,因此無法像傳統BI產品一樣對條件查詢做優化,也沒有緩存的概念。往往很多很小的查詢需要“興師動眾”。盡管如此,開源的Hadoop還是解決了很多人在大數據下的分析問題,真可謂是“功德無量”。

Hadoop集群軟硬件的花費極低,每GB存儲和計算的成本是其他企業級產品的百分之一甚至千分之一,性能卻非常出色。我們可以輕松地進行千億乃至萬億數據級別的多維統計分析和機器學習。

6月29日的Hadoop Summit 2011上,Yahoo!剝離出一家專門負責Hadoop開發和運維的公司Hortonworks。Cloudera帶來了大量的輔助工具,MapR帶來了號稱三倍于Hadoop MapReduce速度的并行計算平臺。Hadoop必將很快迎來下一代產品,屆時其必然擁有更強大的分析能力和更便捷的使用方式,從而真正輕松面對未來海量數據的挑戰。

作者信息:謝超,Admaster數據挖掘總監,云計算實踐者,10年數據倉庫和數據挖掘咨詢經驗,現專注于分布式平臺上的海量數據挖掘和機器學習。

未經允許不得轉載:存儲在線-存儲專業媒體 » 大數據下的數據分析-Hadoop架構解析
分享到

zhangyong

相關推薦

精品国产午夜肉伦伦影院,双性老师灌满浓jing上课h,天天做天天爱夜夜爽,攵女乱h边做边走