大數據技術體系(轉)


原文:https://mp.weixin.qq.com/s/ky-a4Me6wHvT9zvFFVLWnA

作者:武哥漫談IT(微信公眾號)

如果要問最近幾年,IT行業哪個技術方向最火?一定屬於ABC,即AI + Big Data + Cloud,也就是人工智能、大數據和雲計算。

這幾年,隨着互聯網大潮走向低谷,同時傳統企業紛紛進行數字化轉型,基本各個公司都在考慮如何進一步挖掘數據價值,提高企業的運營效率。在這種趨勢下,大數據技術越來越重要。所以,AI時代,還不了解大數據就真的OUT了!

相比較AI和雲計算,大數據的技術門檻更低一些,而且跟業務的相關性更大。我個人感覺再過幾年,大數據技術將會像當前的分布式技術一樣,變成一項基本的技能要求。

前幾天,我在團隊內進行了一次大數據的技術分享,重點是對大數據知識做一次掃盲,同時提供一份學習指南。這篇文章,我基於分享的內容再做一次系統性整理,希望對大數據方向感興趣的同學有所幫助,內容分成以下5個部分:

1、大數據的發展歷史 

2、大數據的核心概念 

3、大數據平台的通用架構和技術體系

4、大數據的通用處理流程 

5、大數據下的數倉體系架構

01 大數據的發展歷史

在解釋「大數據」這個概念之前,先帶大家了解下大數據將近30年的發展歷史,共經歷了5個階段。那在每個階段中,大數據的歷史定位是怎樣的?又遇到了哪些痛點呢?

  

1.1 啟蒙階段:數據倉庫的出現

20世紀90年代,商業智能(也就是我們熟悉的BI系統)誕生,它將企業已有的業務數據轉化成為知識,幫助老板們進行經營決策。比如零售場景中:需要分析商品的銷售數據和庫存信息,以便制定合理的采購計划。

顯然,商業智能離不開數據分析,它需要聚合多個業務系統的數據(比如交易系統、倉儲系統),再進行大數據量的范圍查詢。而傳統數據庫都是面向單一業務的增刪改查,無法滿足此需求,這樣就促使了數據倉庫概念的出現。

傳統的數據倉庫,第一次明確了數據分析的應用場景,並采用單獨的解決方案去實現,不依賴業務數據庫。

1.2 技術變革:Hadoop誕生

2000年左右,PC互聯網時代來臨,同時帶來了海量信息,很典型的兩個特征:

  • 數據規模變大:Google、雅虎等互聯網巨頭一天可以產生上億條行為數據。

  • 數據類型多樣化:除了結構化的業務數據,還有海量的用戶行為數據,以圖像、視頻為代表的多媒體數據。

很顯然,傳統數據倉庫無法支撐起互聯網時代的商業智能。2003年,Google公布了3篇鼻祖型論文(俗稱「谷歌3駕馬車」),包括:分布式處理技術MapReduce,列式存儲BigTable,分布式文件系統GFS。這3篇論文奠定了現代大數據技術的理論基礎。

苦於Google並沒有開源這3個產品的源代碼,而只是發布了詳細設計論文。2005年,Yahoo資助Hadoop按照這3篇論文進行了開源實現,這一技術變革正式拉開了大數據時代的序幕。

Hadoop相對於傳統數據倉庫,有以下優勢:

  • 完全分布式,可以采用廉價機器搭建集群,完全可以滿足海量數據的存儲需求。

  • 弱化數據格式,數據模型和數據存儲分離,可以滿足對異構數據的分析需求。

隨着Hadoop技術的成熟,2010年的Hadoop世界大會上,提出了「數據湖」的概念。

數據湖是一個以原始格式存儲數據的系統。

企業可以基於Hadoop構建數據湖,將數據作為企業的核心資產。由此,數據湖拉開了Hadoop商業化的大幕。

1.3 數據工廠時代:大數據平台興起

商用Hadoop包含上十種技術,整個數據研發流程非常復雜。為了完成一個數據需求開發,涉及到數據抽取、數據存儲、數據處理、構建數據倉庫、多維分析、數據可視化等一整套流程。這種高技術門檻顯然會制約大數據技術的普及。

此時,大數據平台(平台即服務的思想,PaaS)應運而生,它是面向研發場景的全鏈路解決方案,能夠大大提高數據的研發效率,讓數據像在流水線上一樣快速完成加工,原始數據變成指標,出現在各個報表或者數據產品中。

1.4 數據價值時代:阿里提出數據中台

2016年左右,已經屬於移動互聯網時代了,隨着大數據平台的普及,也催生了很多大數據的應用場景。

此時開始暴露出一些新問題:為了快速實現業務需求,煙囪式開發模式導致了不同業務線的數據是完全割裂的,這樣造成了大量數據指標的重復開發,不僅研發效率低、同時還浪費了存儲和計算資源,使得大數據的應用成本越來越高。

極富遠見的馬雲爸爸此時喊出了「數據中台」的概念,「One Data,One Service」的口號開始響徹大數據界。數據中台的核心思想是:避免數據的重復計算,通過數據服務化,提高數據的共享能力,賦能業務。

02 大數據的核心概念

了解了大數據的發展歷史后,再解釋下大數據的幾個核心概念。

2.1 究竟什么是大數據?

大數據是一種海量的、高增長率的、多樣化的信息資產,它需要新的存儲和計算模式才能具有更強的決策力、流程優化能力。

 

下面是大數據的4個典型特征:

  • Volume:海量的數據規模,數據體量達到PB甚至EB級別。

  • Variety:異構的數據類型,不僅僅包含結構化的數據、還包括半結構化和非結構化數據,比如日志文件、圖像、音視頻等。
  • Velocity:快速的數據流轉,數據的產生和處理速度非常快。
  • Value:價值密度低,有價值的數據占比很小,需要用到人工智能等方法去挖掘新知識。

2.2 什么又是數據倉庫?

數據倉庫是面向主題的、集成的、隨着時間變化的、相對穩定的數據集合。

 

簡單理解,數據倉庫是大數據的一種組織形式,有利於對海量數據的維護和進一步分析。

  • 面向主題的:表示按照主題或者業務場景組織數據。

  • 集成的:從多個異構數據源采集數據,進行抽取、加工、集成。
  • 隨時間變化的:關鍵數據需要標記時間屬性。
  • 相對穩定的:極少進行數據刪除和修改,而只是進行數據新增。

2.3 傳統數據倉庫 vs 新一代數據倉庫隨着大數據時代的到來,傳統數據倉庫和新一代數據倉庫必然有很多不同,下面從多維度對比下兩代數據倉庫的異同。

 

03 大數據平台的通用架構

前面談到大數據相關的技術有幾十種,下面通過大數據平台的通用架構來了解下整個技術體系。

 

 

3.1 數據傳輸層

  • Sqoop:支持RDBMS和HDFS之間的雙向數據遷移,通常用於抽取業務數據庫(比如MySQL、SQLServer、Oracle)的數據到HDFS.

  • Cannal:阿里開源的數據同步工具,通過監聽MySQL binlog,實現增量數據訂閱和近實時同步。
  • Flume:用於海量日志采集、聚合和傳輸,將產生的數據保存到HDFS或者HBase中。
  • Flume + Kafka:滿足實時流式日志的處理,后面再通過Spark Streaming等流式處理技術,可完成日志的實時解析和應用。

3.2 數據存儲層

  • HDFS:分布式文件系統,它是分布式計算中數據存儲管理的基礎,是Google GFS的開源實現,可部署在廉價商用機器上,具備高容錯、高吞吐和高擴展性。

  • HBase:分布式的、面向列的NoSQL KV數據庫, 它是Google BigTable的開源實現,利用HDFS作為其文件存儲系統,適合大數據的實時查詢(比如:IM場景)。
  • Kudu:折中了HDFS和HBase的分布式數據庫,既支持隨機讀寫、又支持OLAP分析的大數據存儲引擎(解決HBase不適合批量分析的痛點)。

3.3 資源管理層

  • Yarn:Hadoop的資源管理器,負責Hadoop集群資源的統一管理和調度,為運算程序(MR任務)提供服務器運算資源(CPU、內存),能支持MR、Spark、Flink等多種框架。

  • Kubernates:由Google開源,一種雲平台的容器化編排引擎,提供應用的容器化管理,可在不同雲、不同版本操作系統之間進行遷移。目前,Spark、Storm已經支持K8S。

3.4 數據計算層大數據計算引擎決定了計算效率,是大數據平台最核心的部分,它大致了經歷以下4代的發展,又可以分成離線計算框架和實時計算框架。

 

 

3.4.1 離線計算框架

  • MapReduce:面向大數據並行處理的計算模型、框架和平台(將計算向數據靠攏、減少數據傳輸,這個設計思路非常巧妙)。
  • Hive:一個數據倉庫工具,能管理HDFS存儲的數據,可以將結構化的數據文件映射為一張數據庫表,並提供完整的SQL查詢功能(實際運行時,是將Hive SQL翻譯成了MapReduce任務),適用離線非實時數據分析。
  • Spark sql:引入RDD(彈性分布式數據集)這一特殊的數據結構,將SQL轉換成RDD的計算,並將計算的中間結果放在內存中,因此相對於Hive性能更高,適用實時性要求較高的數據分析場景。


3.4.2 實時計算框架

  • Spark Streaming:實時流數據處理框架(按時間片分成小批次,s級延遲),可以接收Kafka、Flume、HDFS等數據源的實時輸入數據,經過處理后,將結果保存在HDFS、RDBMS、HBase、Redis、Dashboard等地方。
  • Storm:實時流數據處理框架,真正的流式處理,每條數據都會觸發計算,低延遲(ms級延遲)。
  • Flink:更高級的實時流數據處理框架,相比Storm,延遲比storm低,而且吞吐量更高,另外支持亂序和調整延遲時間。

3.5 多維分析層

  • Kylin:分布式分析引擎,能在亞秒內查詢巨大的Hive表,通過預計算(用空間換時間)將多維組合計算好的結果保存成Cube存儲在HBase中,用戶執行SQL查詢時,將SQL轉換成對Cube查詢,具有快速查詢和高並發能力。
  • Druid:適用於實時數據分析的高容錯、高性能開源分布式系統,可實現在秒級以內對十億行級別的表進行任意的聚合分析。 

04 大數據的通用處理流程

了解了大數據平台的通用架構和技術體系后,下面再看下針對離線數據和實時數據,是如何運用大數據技術進行處理的?

 

 

上圖是一個通用的大數據處理流程,主要包括以下幾個步驟:

  • 數據采集:這是大數據處理的第一步,數據來源主要是兩類,第一類是各個業務系統的關系數據庫,通過Sqoop或者Cannal等工具進行定時抽取或者實時同步;第二類是各種埋點日志,通過Flume進行實時收集。
  • 數據存儲:收集到數據后,下一步便是將這些數據存儲在HDFS中,實時日志流情況下則通過Kafka輸出給后面的流式計算引擎。
  • 數據分析:這一步是數據處理最核心的環節,包括離線處理和流處理兩種方式,對應的計算引擎包括MapReduce、Spark、Flink等,處理完的結果會保存到已經提前設計好的數據倉庫中,或者HBase、Redis、RDBMS等各種存儲系統上。
  • 數據應用:包括數據的可視化展現、業務決策、或者AI等各種數據應用場景。


05 大數據下的數倉體系架構

數據倉庫是從業務角度出發的一種數據組織形式,它是大數據應用和數據中台的基礎。數倉系統一般采用下圖所示的分層結構。

可以看到,數倉系統分成了4層:源數據層、數據倉庫層、數據集市層、數據應用層。采用這樣的分層結構,和軟件設計的分層思想類似,都是為了將復雜問題簡單化,每一層職責單一,提高了維護性和復用性。每一層的具體作用如下:

  • ODS:源數據層,源表。
  • DW:數據倉庫層,包含維度表和事實表,通過對源表進行清洗后形成的數據寬表,比如:城市表、商品類目表、后端埋點明細表、前端埋點明細表、用戶寬表、商品寬表。
  • DM:數據集市層,對數據進行了輕粒度的匯總,由各業務方共建,比如:用戶群分析表、交易全鏈路表。
  • ADS:數據應用層,根據實際應用需求生成的各種數據表。

另外,各層的數據表都會采用統一的命名規則進行規范化管理,表名中會攜帶分層、主題域、業務過程以及分區信息。比如,對於交易域下的一張曝光表,命名可以是這樣:

 

總結

上文對大數據的歷史、核心概念、通用架構、以及技術體系進行了系統性總結。如果大家想深入學習大數據技術,建議參考這篇文章,同時結合下面的學習指南展開。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM