目前圍繞Hadoop體系的大數據架構,主要有哪幾種,有什麼優缺點?

隨著大數據技術的發展,數據挖掘、數據探索等專有名詞的曝光度越來越高,但是在類似於Hadoop系列的大數據分析系統大行其道之前,數據分析工作已經歷了長足的發展,尤其是以BI系統為主的數據分析,已經有了非常成熟和穩定的技術方案和生態系統,對於BI系統來說,大概的架構圖如下:

目前圍繞Hadoop體系的大數據架構,主要有哪幾種,有什麼優缺點?

可以看到在BI系統裡面,核心的模塊是Cube。Cube是一個更高層的業務模型抽象,在Cube之上可以進行多種操作,例如上鑽、下鑽、切片等操作。

大部分BI系統都基於關係型數據庫,而關係型數據庫使用SQL語句進行操作,但是SQL在多維操作和分析的表示能力上相對較弱,所以Cube有自己獨有的查詢語言MDX。

MDX表達式具有更強的多維表現能力,因此以Cube為核心的分析系統基本佔據著數據統計分析的半壁江山,大多數的數據庫服務廠商直接提供BI套裝軟件服務,輕易便可搭建出一套OLAP分析系統,不過BI的問題也隨著時間的推移逐漸暴露出來:

BI系統更多以分析業務數據產生的密度高、價值高的結構化數據為主,對於非結構化和半結構化數據的處理非常乏力。例如圖片、文本、音頻的存儲、分析。

由於數據倉庫為結構化存儲,當數據從其它系統進入數據倉庫這個東西,我們通常叫做ETL過程,ETL動作和業務進行了強綁定,通常需要一個專門的ETL團隊去和業務做銜接,決定如何進行數據的清洗和轉換。

隨著異構數據源的增加,例如如果存在視頻、文本、圖片等數據源,要解析數據內容進入數據倉庫,則需要非常複雜的ETL程序,從而導致ETL變得過於龐大和臃腫。

當數據量過大的時候,性能會成為瓶頸,在TB/PB級別的數據量上表現出明顯的吃力。

數據庫的範式等約束規則,著力於解決數據冗餘的問題,是為了保障數據的一致性。但是對於數據倉庫來說,我們並不需要對數據做修改和一致性的保障,原則上來說,數據倉庫的原始數據都是隻讀的,所以這些約束反而會成為影響性能的因素。

ETL動作對數據的預先假設和處理導致機器學習部分獲取到的數據為假設後的數據,因此效果不理想。例如,如果需要使用數據倉庫進行異常數據的挖掘,那麼在數據入庫經過ETL的時候就需要明確定義需要提取的特徵數據,否則無法結構化入庫,然而大多數情況是需要基於異構數據才能提取出特徵。

在一系列的問題下,以Hadoop體系為首的大數據分析平臺逐漸表現出優異性,圍繞Hadoop體系的生態圈也不斷變大,對於Hadoop系統來說,從根本上解決了傳統數據倉庫瓶頸的問題,但是也帶來一系列的新問題:

從數據倉庫升級到大數據架構,是不具備平滑演進的,基本等於推翻重做;

大數據下的分佈式存儲強調數據的只讀性質,所以類似於Hive、HDFS這些存儲方式都不支持update,HDFS的write操作也不支持並行,這些特性導致其具有一定的侷限性。

基於大數據架構的數據分析平臺側重於從以下幾個維度去解決傳統數據倉庫做數據分析面臨的瓶頸:

分佈式計算:分佈式計算的思路是讓多個節點並行計算,並且強調數據本地性,儘可能的減少數據的傳輸,例如Spark通過RDD的形式來表現數據的計算邏輯,可以在RDD上做一系列的優化,來減少數據的傳輸。

分佈式存儲:所謂的分佈式存儲,指的是將一個大文件拆成N份,每一份獨立的放到一臺機器上,這裡就涉及到文件的副本、分片以及管理等操作,分佈式存儲主要優化的動作都在這一塊。

檢索和存儲的結合:在早期的大數據組件中,存儲和計算相對比較單一,但是目前更多的方向是在存儲上做更多的手腳,讓查詢和計算更加高效,對於計算來說高效不外乎就是查找數據快、讀取數據快,所以目前的存儲不單單的存儲數據內容,同時會添加很多元信息,例如索引信息。像類似於parquet和carbondata都是這樣的思想。

總的來說,目前圍繞Hadoop體系的大數據架構大概有以下幾種:

傳統大數據架構

目前圍繞Hadoop體系的大數據架構,主要有哪幾種,有什麼優缺點?

之所以叫傳統大數據架構,是因為其定位是為了解決傳統BI的問題。簡單來說,數據分析的業務沒有發生任何變化,但是因為數據量、性能等問題導致系統無法正常使用,需要進行升級改造,那麼此類架構便是為了解決這個問題。可以看到,其依然保留了ETL的動作,將數據經過ETL動作進入數據存儲。

優點:簡單、易懂,對於BI系統來說,基本思想沒有發生變化,變化的僅僅是技術選型,用大數據架構替換掉BI的組件。

缺點:對於大數據來說,沒有BI下如此完備的Cube架構,雖然目前有Kylin,但是Lylin的侷限性非常明顯,遠遠沒有BI下Cube的靈活度和穩定度,因此對業務支撐的靈活度不夠,所以對於存在大量報表或複雜鑽取的場景,需要太多的手工定製化,同時該架構依舊以批處理為主,缺乏實時的支撐。

適用場景:數據分析需求依舊以BI場景為主,但是因為數據量、性能等問題無法滿足日常使用。

流式架構

目前圍繞Hadoop體系的大數據架構,主要有哪幾種,有什麼優缺點?

在傳統大數據架構的基礎上,流式架構非常激進,直接拔掉了批處理,數據全程以流的形式處理,所以在數據接入端沒有了ETL,轉而替換為數據通道。經過流處理加工後的數據,以消息的形式直接推送給了消費者。雖然有一個存儲部分,但是該存儲更多以窗口的形式進行存儲,所以該存儲並非發生在數據湖,而是在外圍系統。

優點:沒有臃腫的ETL過程,數據的實效性非常高。

缺點:對於流式架構來說,不存在批處理,因此對於數據的重播和歷史統計無法很好的支撐。對於離線分析僅僅支撐窗口之內的分析。

適用場景:預警、監控、對數據有有效期要求的情況。

Lambda架構

目前圍繞Hadoop體系的大數據架構,主要有哪幾種,有什麼優缺點?

Lambda架構算是大數據系統裡面舉足輕重的架構,大多數架構基本都是Lambda架構或者基於其變種的架構。

Lambda的數據通道分為兩條分支:實時流和離線。實時流依照流式架構,保障了其實時性,而離線則以批處理方式為主,保障了最終一致性。

什麼意思呢?流式通道處理為保障實效性更多的以增量計算為主輔助參考,而批處理層則對數據進行全量運算,保障其最終的一致性。因此,Lambda最外層有一個實時層和離線層合併的動作,此動作是Lambda裡非常重要的一個動作,大概的合併思路如下:

目前圍繞Hadoop體系的大數據架構,主要有哪幾種,有什麼優缺點?

優點:既有實時又有離線,對於數據分析場景涵蓋的非常到位。

缺點:離線層和實時流雖然面臨的場景不相同,但是其內部處理的邏輯卻是相同,因此有大量冗餘和重複的模塊存在。

適用場景:同時存在實時和離線需求的情況。

Kappa架構

目前圍繞Hadoop體系的大數據架構,主要有哪幾種,有什麼優缺點?

Kappa架構在Lambda的基礎上進行了優化,將實時和流部分進行了合併,將數據通道以消息隊列進行替代。因此對於Kappa架構來說,依舊以流處理為主,但是數據卻在數據湖層面進行了存儲,當需要進行離線分析或者再次計算的時候,則將數據湖的數據再次經過消息隊列重播一次則可。

優點:Kappa架構解決了Lambda架構裡面的冗餘部分,以數據可重播的超凡脫俗的思想進行了設計,整個架構非常簡潔。

缺點:雖然Kappa架構看起來簡潔,但是施難度相對較高,尤其是對於數據重播部分。

適用場景:和Lambda類似,該架構是針對Lambda的優化。

Unifield架構

目前圍繞Hadoop體系的大數據架構,主要有哪幾種,有什麼優缺點?

以上的種種架構都圍繞海量數據處理為主,Unifield架構則更激進,將機器學習和數據處理揉為一體,從核心上來說,Unifield依舊以Lambda為主,不過對其進行了改造,在流處理層新增了機器學習層。可以看到數據在經過數據通道進入數據湖後,新增了模型訓練部分,並且將其在流式層進行使用。同時流式層不單使用模型,也包含著對模型的持續訓練。

優點:Unifield架構提供了一套數據分析和機器學習結合的架構方案,非常好的解決了機器學習如何與數據平臺進行結合的問題。

缺點:Unifield架構實施複雜度更高,對於機器學習架構來說,從軟件包到硬件部署都和數據分析平臺有著非常大的差別,因此在實施過程中的難度係數更高。

適用場景:有著大量數據需要分析,同時對機器學習方便又有著非常大的需求或者有規劃的情況。

總結

以上為目前數據處理領域使用較多的幾種架構,當然還有非常多其他架構,不過其思想都會或多或少的類似。數據領域和機器學習領域會持續發展,以上幾種思想或許終究會變得過時,我們只能與時俱進,不斷更新自己的知識庫。

在不久的將來,多智時代一定會徹底走入我們的生活,有興趣入行未來前沿產業的朋友,可以收藏多智時代,及時獲取人工智能、大數據、雲計算和物聯網的前沿資訊和基礎知識,讓我們一起攜手,引領人工智能的未來!


分享到:


相關文章: