基於Hadoop搭建資料分析平臺搭建
企業發展到一定規模都會搭建單獨的BI平臺來做資料分析,即OLAP(聯機分析處理),一般都是基於資料庫技術來構建,基本都是單機產品。除了業務資料的相關分析外,網際網路企業還會對使用者行為進行分析,進一步挖掘潛在價值,這時資料就會膨脹得很厲害,一天的資料量可能會成千萬或上億,對基於資料庫的傳統資料分析平臺的資料儲存和分析計算帶來了很大挑戰。
為了應對隨著資料量的增長、資料處理效能的可擴充套件性,許多企業紛紛轉向Hadoop平臺來搭建資料分析平臺。Hadoop平臺具有分散式儲存及平行計算的特性,因此可輕鬆擴充套件儲存結點和計算結點,解決資料增長帶來的效能瓶頸。
隨著越來越多的企業開始使用Hadoop平臺,也為Hadoop平臺引入了許多的技術,如Hive、Spark SQL、Kafka等,豐富的元件使得用Hadoop構建資料分析平臺代替傳統資料分析平臺成為可能。
01
資料分析平臺架構原理

圖片.png
從概念上講,我們可以把資料分析平臺分為接入層(Landing)、整合層(Integration)、表現層(Persentation)、語義層(Semantic)、終端使用者應用(End-user applications)、元資料(Metadata)。基於Hadoop和資料庫的分析平臺基本概念和邏輯架構是通用的,只是技術選型的不同:
-
接入層(Landing):以和源系統相同的結構暫存原始資料,有時被稱為“貼源層”或ODS;
-
整合層(Integration):持久儲存整合後的企業資料,針對企業資訊實體和業務事件建模,代表組織的“唯一真相來源”,有時被稱為“資料倉庫”;
-
表現層(Presentation):為滿足終端使用者的需求提供可消費的資料,針對商業智慧和查詢效能建模,有時被稱為“資料集市”;
-
語義層(Semantic):提供資料的呈現形式和訪問控制,例如某種報表工具;
-
終端使用者應用(End-user applications):使用語義層的工具,將表現層資料最終呈現給使用者,包括儀表板、報表、圖表等多種形式;
-
元資料(Metadata):記錄各層資料項的定義(Definitions)、血緣(Genealogy)、處理過程(Processing)。
來自不同資料來源的“生”資料(接入層),和經過中間處理之後得到的整合層、表現層的資料模型,都會儲存在資料湖裡備用。
資料湖的實現通常建立在Hadoop生態上,可能直接儲存在HDFS上,也可能儲存在HBase或Hive上,也有用關係型資料庫作為資料湖儲存的可能性存在。這裡向大家推薦一個大資料交流圈q裙:894951460。

下圖說明了資料分析平臺的資料處理流程:

圖片.png
資料分析基本都是單獨的系統,會將其他資料來源的資料(即外部資料)同步到資料平臺的儲存體系來(即資料湖),一般資料先進入到接入層,這一層只簡單的將外部資料同步到資料分析平臺,沒有做其他處理,這樣同步出錯後重試即可,有定時同步和流式同步兩種:
-
定時同步即我們設定在指定時間觸發同步動作;
-
流式同步即外部資料通過Kafka或MQ傳送資料修改通知及內容。
資料分析平臺執行對應操作修改資料。
接入層資料需要經過ETL處理步驟才會進入資料倉庫,資料分析人員都是基於資料倉庫的資料來做分析計算,資料倉庫可以看作資料分析的唯一來源,ETL會將接入層的資料做資料清洗、轉換,再載入到資料倉庫,過濾或處理不合法、不完整的資料,並使用統一的維度來表示資料狀態。有的系統會在這一層就將資料倉庫構建成資料立方體、將維度資訊構建成雪花或星型模式;也有的系統這一層只是統一了所有資料資訊,沒有做資料立方體,留在資料集市做。
資料集市是基於資料倉庫資料對業務關心的資訊做計算提取後得到的進一步資訊,是業務人員直接面對的資訊,是資料倉庫的進一步計算和深入分析的結果,一般都會構建資料立方體。系統開發人員一般會開發頁面來向用戶展示資料集市的資料。
02
基於Hadoop構建資料分析平臺
_____
基於Hadoop構建的資料分析平臺建構理論與資料處理流程與前面講的相同。傳統分析平臺使用資料庫套件構建,這裡我們使用Hadoop平臺的元件。這裡向大家推薦一個大資料交流圈q裙:894951460。

上面這張圖是我們使用到的Hadoop平臺的元件,資料從下到上流動,資料處理流程和上面說的一致。
任務排程負責將資料處理的流程串聯起來,這裡我選擇使用的是Oozie,也有很多其它選擇。
1、資料儲存
基於Hadoop的資料湖主要用到了HDFS、Hive和HBase,HDFS是Hadoop平臺的檔案儲存系統,我們直接操縱檔案是比較複雜的,所以可以使用分散式資料庫Hive或HBase用來做資料湖,儲存接入層、資料倉庫、資料集市的資料。
Hive和HBase各有優勢:HBase是一個NoSQL資料庫,隨機查詢效能和可擴充套件性都比較好;而Hive是一個基於HDFS的資料庫,資料檔案都以HDFS檔案(夾)形式存放,儲存了表的儲存位置(即在HDFS中的位置)、儲存格式等元資料,Hive支援SQL查詢,可將查詢解析成Map/Reduce執行,這對傳統的資料分析平臺開發人員更友好。
Hive資料格式可選擇文字格式或二進位制格式,文字格式有csv、json或自定義分隔,二進位制格式有orc或parquet,他們都基於行列式儲存,在查詢時效能更好。同時可選擇分割槽(partition),這樣在查詢時可通過條件過濾進一步減少資料量。接入層一般選擇csv或json等文字格式,也不做分割槽,以儘量簡化資料同步。資料倉庫則選擇orc或parquet,以提升資料離線計算效能。
資料集市這塊可以選擇將資料灌回傳統資料庫(RDBMS),也可以停留在資料分析平臺,使用NoSQL提供資料查詢或用Apache Kylin來構建資料立方體,提供SQL查詢介面。
2、資料同步
我們通過資料同步功能使得資料到達接入層,使用到了Sqoop和Kafka。資料同步可以分為全量同步和增量同步,對於小表可以採用全量同步,對於大表全量同步是比較耗時的,一般都採用增量同步,將變動同步到資料平臺執行,以達到兩邊資料一致的目的。
全量同步使用Sqoop來完成,增量同步如果考慮定時執行,也可以用Sqoop來完成。或者,也可以通過Kafka等MQ流式同步資料,前提是外部資料來源會將變動傳送到MQ。
3、ETL及離線計算
我們使用Yarn來統一管理和排程計算資源。相較Map/Reduce,Spark SQL及Spark RDD對開發人員更友好,基於記憶體計算效率也更高,所以我們使用Spark on Yarn作為分析平臺的計算選型。
ETL可以通過Spark SQL或Hive SQL來完成,Hive在2.0以後支援儲存過程,使用起來更方便。當然,出於效能考慮Saprk SQL還是不錯的選擇。
結語
感謝您的觀看,如有不足之處,歡迎批評指正。
獲取資料
本次給大家推薦一個免費的學習群,裡面概括資料倉庫/原始碼解析/Python/Hadoop/Flink/Spark/Storm/Hive以及面試資源等。
對大資料開發技術感興趣的同學,歡迎加入Q群: 894951460 ,不管你是小白還是大牛我都歡迎,還有大牛整理的一套高效率學習路線和教程與您免費分享,同時每天更新視訊資料。
最後,祝大家早日學有所成,拿到滿意offer,快速升職加薪,走上人生巔峰。