FacebookTwitterLineHatena

當前BAT基本公開了其大數據平台架構,從網上也能查詢到一些資料,關於大數據分析軟體平台的各類技術介紹也不少,但在那個機制、那個環境、那個人才、那個薪酬體系下,對於傳統企業,可借鑒的東西也是有限的。

技術最終為業務服務,沒必要一定要追求先進性,各個企業應根據自己的實際情況去選擇自己的技術路徑。

與傳統的更多從技術的角度來看待大數據平台架構的方式不同,筆者這次,更多的從業務的視角來談談關於大數據架構的理解,即更多的會問為什麼要採用這個架構,到底能給業務帶來多大價值,實踐的最終結果是什麼。

它不一定具有通用性,但從一定程度講,這個架構可能比BAT的架構更適應大多數企業的情況,畢竟,大多數企業,數據沒到那個份上,也不可能完全自研,商業和開源的結合可能更好一點,權當拋磚引玉。

大數據平台架構的層次劃分沒啥標準,以前筆者曾經做過大數據應用規劃,也是非常糾結,因為應用的分類也是橫縱交錯,後來還是覺得體現一個「能用」原則,清晰且容易理解,能指導建設,這裡將大數據平台劃分為「五橫一縱」。

具體見下圖示例,這張圖是比較經典的,也是妥協的結果,跟當前網上很多的大數據架構圖都可以作一定的映射。

何謂五橫,基本還是根據數據的流向自底向上劃分五層,跟傳統的數據倉庫其實很類似,數據類的系統,概念上還是相通的,分別為數據採集層、數據處理層、數據分析層、數據訪問層及應用層。

同時,大數據平台架構跟傳統數據倉庫有一個不同,就是同一層次,為了滿足不同的場景,會採用更多的技術組件,體現百花齊放的特點,這是一個難點。

數據採集層:既包括傳統的ETL離線採集、也有實時採集、互聯網爬蟲解析等等。

數據處理層:根據數據處理場景要求不同,可以劃分為HADOOP、MPP、流處理等等。

數據分析層:主要包含了分析引擎,比如數據挖掘、機器學習、 深度學習等。

數據訪問層:主要是實現讀寫分離,將偏嚮應用的查詢等能力與計算能力剝離,包括實時查詢、多維查詢、常規查詢等應用場景。

數據應用層:根據企業的特點不同劃分不同類別的應用,比如針對運營商,對內有精準行銷、客服投訴、基站分析等,對外有基於位置的客流、基於標籤的廣告應用等等。

數據管理層:這是一縱,主要是實現數據的管理和運維,它橫跨多層,實現統一管理。

1、數據採集層,這是基礎。

離線批量採集,採用的是HADOOP,這個已經成為當前流線採集的主流引擎了,基於這個平台,需要部署數據採集應用或工具。

諸如BAT都是自己研發的產品,一般企業,可以採用商用版本,現在這類選擇很多,比如華為BDI等等,很多企業技術實力有,但起步的時候往往對於應用場景的理解比較弱,細節做工很差,導致做出來的產品難以達到要求,比如缺乏統計功能等,跟BAT差距很大,傳統企業去採購這類產品,要謹慎小心。

一個建議是,當採購產品的時候,除了技術先進性和指標外,更多的應該問問是版本啥時候上線的,是否在哪裡成功部署,是否有足夠多的客戶,如果能做個測試就更好,否則,你就是小白鼠哦,這個坑踩了不少。

能做和做成產品是兩個境界的事情,小的互聯網企業當然也能做出對於自己好用的採集工具,但它很難抽象並打造出一個真正的產品,BAT自研其實形成了巨大的優勢。

實時採集現在也成了大數據平台的標配,估計主流就是FLUME+KAFKA,然後結合流處理+內存資料庫吧,這個技術肯定靠譜,但這類開源的東西好是好,但一旦出現問題往往解決周期往往比較長。

除了用FLUME,針對ORACLE資料庫的報表製作為了實現實時採集,也可以採用OGG/DSG等技術實現實時的日誌採集,可以解決傳統數據倉庫抽全量表的負荷問題。

爬蟲當前也逐漸成為很多企業的採集標配,因為互聯網新增數據主要靠它,可以通過網頁的解析獲取大量的上網信息,什麼輿情分析、網站排名啥的,建議每個企業都應該建立企業級的爬蟲中心,如果它未在你的大數據平台規劃內,可以考慮一下,能拿的數據都不拿,就沒什麼好說了。

企業級的爬蟲中心的建設難度蠻大,因為不僅僅是需要爬蟲,還需要建立網址和應用知識庫,需要基於網頁文本進行中文分詞,倒排序及文本挖掘等,這一套下來,挑戰很大,當前已經有不少開源組件了,比如solr、lucent、Nutch、ES等等,但要用好它,路漫漫其修遠兮。

還有一個就是,如果有可能,筆者建議將數據採集平台升級為數據交換平台,因為其實企業內有大量的數據流動,不僅僅是單向的數據採集,而且有很多數據交換,比如需要從ORACLE倒數據到GBASE,從HBASE倒數據到ASTER等等,對於應用來講,這個價值很大。

既然數據採集和數據交換有很多功能非常類似,為什麼不做整合呢?也便於統一管理,感覺企業的數據交換大量都是應用驅動,介面管理亂七八糟,這也是我的一個建議。

總得來講,建設大數據採集平台非常不易,從客戶的角度講,至少要達到以下三個要求:

多樣化數據採集能力:支援對錶、文件、消息等多種數據的實時增量數據採集(使用flume、消息隊列、OGG等技術)和批量數據分布式採集等能力(SQOOP、FTP VOER HDFS),比基於傳統ETL性能有量級上的提升,這是根本。

可視化快速配置能力:提供圖形化的開發和維護界面,支援圖形化拖拽式開發,免代碼編寫,降低採集難度,每配置一個數據介面耗時很短,以降低人工成本。

統一調度管控能力:實現採集任務的統一調度,可支援Hadoop的多種技術組件(如 MapReduce、Spark 、HIVE)、關係型資料庫存儲過程、 shell腳本等,支援多種調度策略(時間/介面通知/手工)。

2、數據處理層,現在有個詞叫混搭,的確是這樣。

Hadoop的HIVE是傳統數據倉庫的一種分布式替代。應用在傳統ETL中的數據的清洗、過濾、轉化及直接匯總等場景很適合,數據量越大,它的性價比越高。但目前為止看,其支撐的數據分析場景也是有限的, 簡單的離線的海量分析計算是它所擅長的,相對應的,複雜的關聯交叉運算其速度很慢。

一定程度講,比如企業客戶統一視圖寬表用HIVE做比較低效,因為涉及到多方數據的整合,但不是不可以做,最多慢點嘛,還是要講究個平衡。

hadoop到了X000台集群的規模也撐不住了,當前很多企業的數據量應該會超過這個數量,除了像阿里等自身有研發能力的企業(比如ODPS),是否也要走向按照業務拆分Hadoop集群的道路?諸如浙江行動已經拆分了固網、移網、創新等多個hadoop集群。

Hadoop的SPARK的很適合機器學習的迭代,但能否大規模的應用於數據關聯分析,能否一定程度替代MPP,還需要實踐來驗證。

MPP應該來說,是採用分布式架構對於傳統數據倉庫最好的替代,畢竟其實際上是變了種的關係型資料庫,對於SQL提供完整支援,在HIVE做了轉化分析後,數據倉庫的融合建模用它來做性能綽綽有餘,其性價比較傳統DB2更好一點,比如經過實用,Gbase30-40台集群就能超過2台頂配的IBM 780。

MPP現在產品很多,很難做優劣判斷,但一些實踐結果可以說下,GBASE不錯,公司很多系統已經在上面跑了,主要還是國產的,技術服務保障相對靠譜,ASTER還有待觀望,自帶一些演算法庫是有其一些優勢,GreenPlum、Vertica沒用過,不好說。

現在有個說法是MPP最終也要被Hadoop那套框架替代,畢竟諸如SPARK啥的都在逐步穩定和成熟,但在短期內,我覺得還是很靠譜的,如果數據倉庫要採用漸進的演化方式,MPP的確是很好的選擇。

現在諸如中國移動,eBAY等大量公司都在採用這類混搭結構,以適應不同的應用場景,顯然是一種自然的選擇。

大數據平台的三駕馬車,少不了流處理。

對於很多企業來講,其顯然是核武器般的存在,大量的應用場景需要它,因此務必要進行建設,比如在IOE時代不可想像的實時、准實時數據倉庫場景,在流處理那裡就變得很簡單了,以前統計個實時指標,也是很痛苦的事情,當前比如反欺詐實時系統,一天系統就申請部署好了。

只嘗試過STORM和IBM STREAM,推薦IBM STREAM,雖然是商業版本,但其處理能力超過STORM不是一點半點,據說STORM也基本不更新了,但其實數據量不大,用啥都可以,從應用的角度講,諸如IBM這種商業智慧版本,是不錯的選擇,支撐各類實時應用場景綽綽有餘。

流處理集群以流處理技術結合內存資料庫,用以實時及准實時數據處理,基於IBM Streams流處理集群承載公司的實時業務:

3、數據分析層,與時俱進吧。

先談談語言,R和Python是當前數據挖掘開源領域的一對基友,如果要說取捨,筆者真說不出來,感覺Python更偏向工程一點,比如有對分詞啥的直接支撐,R的繪圖能力異常強大。但他們原來都以樣本統計為主,因此大規模數據的支撐有限。

筆者還是更關注分布式挖掘環境,SPARK是一種選擇,建議可以採用SPARK+scala,畢竟SPARK是用scala寫的,對很多原生的特性能夠快速支援。

TD的MPP資料庫ASTER也內嵌了很多演算法,應該基於並行架構做了很多優化,似乎也是一種選擇,以前做過幾度交往圈,速度的確很快,但使用資料屈指可數,還需要老外的支援。

傳統的數據挖掘工具也不甘人後,SPSS現在有IBM SPSS Analytic Server,加強了對於大數據hadoop的支撐,業務人員使用反饋還是不錯的。

也許未來機器學習也會形成高低搭配,高端用戶用spark,低端用戶用SPSS,也是要適應不同的應用場景。

深度學習現在漸成潮流,TensorFlow是個選擇,公司當前也部署了一套,希望有機會使用,往人工智慧方向演進是大勢所趨。

無論如何,工具僅僅是工具,最終靠的還是建模工程師駕馭能力。

4、數據開放層,也處在一個戰國時代。

有些工程師直接將HIVE作為查詢輸出,雖然不合理,也體現出計算和查詢對於技術能力要求完全不同,即使是查詢領域,也需要根據不同的場景,選擇不同的技術。

HBASE很好用,基於列存儲,查詢速度毫秒級,對於一般的百億級的記錄查詢那也是能力杠杠的,具有一定的高可用性,我們生產上的詳單查詢、指標庫查詢都是很好的應用場景。但讀取數據方面只支援通過key或者key範圍讀取,因此要設計好rowkey。

Redis是K-V資料庫,讀寫速度比HBASE更快,大多時候,HBASE能做的,Redis也能做,但Redis是基於內存的,主要用在key-value 的內存緩存,有丟失數據的可能,當前標籤實時查詢會用到它,合作過的互聯網或廣告公司大多採用該技術,但如果數據越來越大,那麼,HBASE估計就是唯一的選擇了?

另外已經基於IMPALA提供互聯網日誌的實時線上查詢應用,也在嘗試在行銷平台採用SQLFire和GemFire實現分布式的基於內存的SQL關聯分析,雖然速度可以,但也是BUG多多,引入和改造的代價較大。

Kylin當前算是基於hadoop/SPARK的多維分析的殺手級工具,應用的場景非常多,希望有機會使用。

5、數據應用層,百花齊放吧。

每個企業應根據自己的實際規劃自己的應用,其實搞應用藍圖很難,大數據架構越上層越不穩定,因為變化太快,以下是運營商對外變現當前階段還算通用的一張應用規劃圖,供參考:

6、數據管理層,路漫漫其修遠兮

大數據平台的管理有應用管理和系統管理之分,從應用的角度講,比如我們建立了DACP的可視化管理平台,其能適配11大搭數據技術組件,可以實現對各類技術組件的透明訪問能力,同時通過該平台實現從數據設計、開發到數據銷毀的全生命周期管理,並把標準、質量規則和安全策略固化在平台上,實現從事前管理、事中控制和事後稽核、審計的全方位質量管理和安全管理。

其它諸如調度管理、元數據管理、質量管理當然不在話下,因為管住了開發的源頭,數據管理的複雜度會大幅降低。

從系統管理的角度看,公司將大數據平台納入統一的雲管理平台管理(私有雲),雲管理平台包括支援
一鍵部署、增量部署的可視化運維工具、面向多租戶的計算資源管控體系(多租戶管理、安全管理、資源管理、負載管理、配額管理以及計量管理)和完善的用戶許可權管理體系,提供企業級的大數據平台運維管理能力支撐,當然這麼宏大的目標要實現也非一日之功。

總結下大數據平台的一些革命性價值。

大數據時代,大多數企業的架構必然向著分布式、可擴展及多元化發展,所謂合久必分,不再有一種技術能包打天下了, 這衝擊著傳統企業集中化的技術外包模式,挑戰是巨大的。

大數據及雲計算時代,面多這麼多技術組件,要採用一項新的技術,機遇和風險共存:

對於大數據平台的商業版本,企業面對的是合作夥伴的服務跟不上,因為發展太快,對於開源版本,企業面臨的是自身運維能力和技術能力的挑戰,對於自主能力實際要求更高。

當前BAT、華為、新型互聯網等企業在風捲殘雲般的席捲人才, 對於諸如運營商等大型企業的人才挑戰是巨大的,但同時也蘊含著機會, 事實上,對於致力於搞大數據的人來講,來運營商等企業搞也是不錯的選擇,因為一方面企業在轉型,另一方面數據量夠大,技術主導的機會更多。

文 | 傅一平

喜歡這篇文章嗎?歡迎分享按讚,給予我們支持和鼓勵!

熱門文章推薦

立即試用,可獲取更多 報表範本和案例

免費試用