天天看點

大資料技術架構概述

自底向上,與osi類似,通用架構下的大資料體系有七層:資料源、資料收集層、資料存儲層、資源管理與服務協調層、計算引擎層、資料分析層及資料可視化層。圖示如下:

大資料技術架構概述

資料收集層直接與資料源對接,負責采集産品使用過程中生成的日志,具有分布式、通用化等屬性。由于實際場景中,大部分的資料源是零散的,是以采集到一起的難度較大,因而在設計上應該具備如下幾個特點:

擴充性:能夠配置多種不同的資料源,并且在遇到洪峰時不會成為系統瓶頸;

可靠性:資料在傳輸的過程中不能丢失(金融類資料尤其如此);

安全性:對于敏感資料,傳輸的過程要進行加密(密碼、金錢等);

低延遲:由于資料源采集的日志通正常模龐大,是以應盡快的收集到存儲系統中,不能産生積壓。

在以hadoop/spark為代表的開源架構下,資料收集層通常有如下幾種方案選擇:

sqoop:對于關系型資料庫的全量導入比較通用;

canal:對于關系型資料庫的增量導入比較通用;

flume:對于非關系型日志采集比較通用,例如文本日志等;

kafka:分布式消息隊列,類似于資料通道的概念,具有分布式高容錯的特點。

由于傳統的關系型資料庫在分布式、擴充性及高可用方面存在一定的瓶頸,因而很難适應大資料場景,不建議作為主要的存儲和計算系統。資料存儲層主要負責資料的落地和存儲,包括了關系型資料和非關系型資料,并擁有中央化的排程體系。資料存儲層主要有如下特點:

擴充性:作為資料落地的主要承載,資料的不斷增長是長期的任務,因而叢集的承載能力在一定時間内,總會達到瓶頸。是以,資料存儲層需要考慮機器的擴充能力。

容錯性:出于成本的考慮,資料存儲層通常機器較多,因而需要建設在比較廉價的裝置之上,這就要求系統自身有比較好的容錯特性,在一台或多台機器出現故障時不會導緻資料丢失。

存儲模型:由于資料的多樣性,資料存儲層需要支援結構化、非結構化兩種類型資料,因而需要支援文本、列存等多種資料模型。

由于分布式計算的概念由google提出,在google通常采用gfs、bigtable、megastore、spanner等技術方案。在以hadoop/spark為代表的開源架構下,資料存儲層通常有如下幾種方案選擇:

hdfs:分布式檔案系統,gfs的開源實作,具有非常好的擴充性與容錯性,并非常合适搭建在廉價裝置上;hbase:以hdfs為基礎建構的分布式資料庫,bigtable的開源實作,能夠存儲結構化與半結構化資料,支援行與列的無限擴充;

kudu:cloudera開源的運作在hdfs上的列式存儲系統,具備擴充性與高可用性。

随着網際網路技術規模的不斷增長,不同技術與架構混用的情況越來越常見,對于運維、開發、資源利用等方面産生了巨大的挑戰。為了将所有的技術架構部署在統一的平台上,共享機器資源,因而引入了資源管理與服務協調層。引入之後有如下幾方面的優勢:

資源利用高:能夠有效的考慮程式數量與機器資源之間的平衡性,充分利用叢集資源;

運維成本低:每種架構的運作情況都彙總到統一的運維平台上,對于人員的要求會更低;

資料能共享:同一份資料能夠提供給不同計算架構進行計算,共享計算結果,降低存儲與運算成本。

google采用了borg、omega及chubby三種方案來進行資源管理。在以hadoop/spark為代表的開源架構下,資源管理與服務協調層通常有如下幾種方案選擇:

yarn:hadoop架構中負責統一資源管理與排程的系統,能夠集中管理機器資源(cpu、記憶體等),并且能夠按照隊列的方式排程任務;

zookeeper:分布式協調服務,基于paxos算法實作,提供分布式隊列、分布式鎖等複雜場景的解決方案。

計算引擎主要分為批處理和流處理兩種場景:當資料量龐大并且實時性要求不高時,或者計算邏輯複雜時,采用批處理的方式計算資料,追求高吞吐量;當資料量适中且實時性要求高,且計算邏輯相對簡單時,采用流處理方式計算資料,追求低延遲性。目前不存在實時處理複雜或龐大資料的計算架構。除了以上兩種場景,近年來互動式處理方式越來越受歡迎,通過标準化的olap方式來組織和計算資料,在使用的便捷性上有巨大的優勢。三種引擎的适用場景如下:

批處理:索引建立、資料挖掘、大規模複雜資料分析、機器學習;

流處理:廣告推薦、實時報表、反作弊;

互動式:資料查詢、報表計算。

google提供了mapreduce、dremel兩種架構的實作原理,被開源架構采用并使用場景廣泛。pregel、precolator、millwheel也在開源場景下有所采用。目前hadoop/spark為代表的開源架構下常用的方案如下:

mapreduce:經典的批處理引擎,具有非常好的擴充和容錯性;

impala/presto/drill:分别由cloudera、facebook、apache開源,使用标準sql處理存儲在hdfs上的資料,基于google dreml的開源實作;

spark:通過dag引擎,提供了基于rdd的資料抽象表示,主要利用記憶體進行快速的資料挖掘;

storm/spark streaming/flink:流式處理系統,都具備良好的容錯和擴充性,實作的細節有所不同。

直接産出結果的計算架構,但很多事情出于簡化的考慮,可以通過計算引擎層的互動式架構來代替。通常情況下,出于平台端的技術考慮,該層采用mysql、oracle、postgresql等關系型資料庫的方案較多。按照通常的分類方式,有如下幾種:

impala/presto/drill:互動式計算引擎代替實作;

mysql/oracle/postgresql:關系型資料庫實作;

hive/pig:海量資料下的計算實作;

mahout/mllib:常用的機器學習和資料挖掘算法集合,最初基于mapreduce實作,現在大部分由spark實作;

beam/cascading:統一了批處理和流式計算兩種架構,提供了更進階的api來實作計算邏輯。

在大資料場景下,通常由前端插件來實作,如echarts等,實作選擇的方案較多。常見的展現方式有:折線圖、柱狀圖、餅圖、散點圖、k線圖、雷達圖、熱力圖、路徑圖等。

資料可視化層設計了計算機圖形學、圖像處理技術等相關學科,并涉及到了互動處理、計算機輔助設計、計算機視覺、人機互動等多個技術領域。

繼續閱讀