1.架構圖
有空再補
2.技術簡介
組件 | 版本 | 簡介 |
---|---|---|
FLINK | 1.12.1 | 分布式計算引擎 |
HIVE | 3.1.2 | 最常用的 HQL 數(shù)倉工具 |
PHOENIX | 5.0.0 | HBase SQL 化查詢分析工具 |
SPARK | 3.0.1 | 分布式計算引擎 |
SQOOP | 1.4.7 | 數(shù)據(jù)采集與轉(zhuǎn)儲服務 |
TEZ | 0.10.0 | 優(yōu)化 MapReduce 任務的 DAG |
YARN | 3.1.1 | 分布式資源調(diào)度服務 |
HDFS | 3.1.1 | 分布式存儲服務 |
ZOOKEEPER | 3.4.13 | 分布式應用程序協(xié)調(diào)服務 |
ALERTMANAGER | 0.21.0 | 發(fā)送監(jiān)控告警信息 |
GRAFANA | 6.5.1 | 展示監(jiān)控數(shù)據(jù) |
INFLUXDB | 1.8.0 | 存儲監(jiān)控數(shù)據(jù) |
NODEEXPORTER | 1.0.0 | 讀取節(jié)點資源監(jiān)控指標 |
PROMETHEUS | 2.18.1 | 拉取監(jiān)控數(shù)據(jù) |
USDPMONITOR | 1.0.0 | 讀取組件監(jiān)控指標 |
HUE | 4.8.0 | 可視化管理服務 |
ZEPPELIN | 0.9.0 | 可視化管理服務 |
DOLPHINSCHEDULER | 1.3.6 | 任務調(diào)度服務 |
3.數(shù)倉中表的種類及其概念
一般表分為兩個類型,分別是維度表和事務表
3.1事實表
事實表分為兩類:事務型事實表和周期型事實表
事務型事實表,一般指隨著業(yè)務發(fā)生不斷產(chǎn)生的數(shù)據(jù).特點是一旦發(fā)生不會再變化. 一般比如,交易流水,操作日志,出庫入庫記錄等等
周期型事實表,一般指隨著業(yè)務發(fā)生不斷產(chǎn)生的數(shù)據(jù).與事務型不同的是,數(shù)據(jù)會隨著業(yè)務周期性的推進而變化.比如訂單,其中訂單狀態(tài)會周期性變化. 再比如,請假 貸款申請,隨著批復狀態(tài)在周期性變化
事實表的特征:表里沒有存放實際的內(nèi)容,他是一堆主鍵的集合,這些ID分別能對應到維度表中的一條記錄.事實表包含了與各維度表相關聯(lián)的外鍵,可與維度表關聯(lián).事實表的度量通常是數(shù)值類型,且記錄數(shù)會不斷增加,表數(shù)據(jù)規(guī)模迅速增長
3.2.維度表
一般是指對應一些業(yè)務狀態(tài),代碼的解釋表,也可以稱之為碼表.比如地區(qū)表,訂單類型,支付方式,商品分類等等
維度表可以分為兩類:一般維度表和固定維度表
一般維度表的數(shù)據(jù)是不斷增加和變化的
固定維度表的數(shù)據(jù)是不變的
每個維度表都包含單一的主鍵列.維度表的主鍵可以作為與之關聯(lián)的任何事實表的外鍵.維度表通常比較寬,是扁平型非規(guī)范表,包含大量的低粒度的文本屬性
3.3.表的概念總結
總的說來,在數(shù)據(jù)倉庫中不需要嚴格遵守規(guī)范化設計原則.因為數(shù)據(jù)倉庫的主導功能就是面向分析,以查詢?yōu)橹?不涉及數(shù)據(jù)更新操作.事實表的設計是以 能夠正確記錄歷史信息 為準則,維度表的設計是以 能夠用合適的角度來聚合主題內(nèi)容 為準則
3.4 表的同步策略
3.4.1 維度表
維度表的數(shù)據(jù)多少都會有變化,可根據(jù)實際業(yè)務選擇全量或者拉鏈.
有些維度表隨著時間緩慢變化,這種維度表稱為緩慢變化維,當然這里的緩慢是相對事實表的,維度數(shù)據(jù)隨著時間變化,會產(chǎn)生歷史切片問題.如果業(yè)務不要求反應維度的歷史,可直接全量,否則應該使用拉鏈表或者歷史表.
3.4.2 事實表的同步策略
事務型事實表
每日增量,因為數(shù)據(jù)不會變化,而且數(shù)據(jù)量巨大,所以每天只同步新增數(shù)據(jù)即可
周期型事實表
- 每日全量,首先這類表從數(shù)據(jù)量的角度,存每日全量的話,數(shù)據(jù)量太大,冗余也太大
- 每日增量,如果用每日增量的話無法反應數(shù)據(jù)變化.一般來說這個表,足夠計算大部分當日數(shù)據(jù),但是這種依然無法解決某一個歷史時間點(時間切片)的切片數(shù)據(jù)
- 拉鏈表,利用每日新增和變化表,制作一張拉鏈表,以方便的取到某個時間切片的快照數(shù)據(jù),所以我們需要得到每日新增及變化量
3.4.3 拉鏈表的設計
- 拉鏈表不存儲冗余的數(shù)據(jù)播歼,只有某行的數(shù)據(jù)發(fā)生變化潮改,才需要保存下來篓冲,相比每次全量同步會節(jié)省存儲空間
- 能夠查詢到歷史快照
- 額外的增加了兩列(dw_start_date dw_end_date),為數(shù)據(jù)行的生命周期,表示某條數(shù)據(jù)的有效時間和失效時間,失效時間可以默認9999-12-31
此時,只要數(shù)據(jù)沒有變化,就無需同步.如果數(shù)據(jù)發(fā)生了變化,就將原數(shù)據(jù)的dw_end_date改為當前時間,同時保存新的數(shù)據(jù),新數(shù)據(jù)的dw_start_date為當前時間
一般的操作步驟是:第一次全量導入,之后增量的數(shù)據(jù)導入ODS,再合并歷史數(shù)據(jù)
4.維度模型設計
4.1.維度建谋剩基本概念
維度建模以分析決策的需求出發(fā)構建模型,構建的數(shù)據(jù)模型為分析需求服務,因此它重點解決用戶如何更快速完成分析需求,同時還有較好的大規(guī)模復雜查詢的響應性能
維度建模是專門應用于分析型數(shù)據(jù)庫 數(shù)據(jù)倉庫 數(shù)據(jù)集市建模的方法.數(shù)據(jù)集市可以理解為是一種"小型數(shù)據(jù)倉庫"
4.2.維度建模三種模式
目前有三種模式,分別是星型模型,雪花模型,星座模型
4.2.1.星型模型
最常用的維度建模方式.星型模型是以事實表為中心,所有的維度表直接連接在事實表上,像星星一樣
星型模型的維度建模由一個事實表和一組維度表組成,且具有以下特點
- 維度表只和事實表關聯(lián),維度表之間沒有關聯(lián)
- 每個維度表主鍵是事實表的外鍵
-
以事實表為核心,維度表圍繞核心呈星型分布
以下就是典型的星型模型
4.2.2.雪花模型
雪花模型是星型模型的擴展.雖然這種模型相比星型更規(guī)范一些,但是由于這種模型不太容易理解,維護成本比較高,而且需要關聯(lián)多層維表,性能也比星型模型要低,所以不是很常用
4.2.3.星座模型
星座模式是星型模式延伸而來,星型模式是基于一張事實表的,而星座模式是基于多張事實表的,而且共享維度信息
前面介紹的兩種維度建模方法都是多維度表對應單事實表,但在很多時候維度空間內(nèi)的事實表不止一個,而一個維度表也可能被多個事實表用到,在業(yè)務發(fā)展后期,絕大部分維度建模都采用的是星座模式
5.數(shù)據(jù)倉庫理論知識
5.1.為什么要分層
分層的主要原因是在管理數(shù)據(jù)的時候,能對數(shù)據(jù)有一個更加清晰的掌控,詳細來講,主要有下面幾個原因
- 清晰數(shù)據(jù)結構
每一個數(shù)據(jù)分層都有他的作用域,這樣我們在使用表的時候能更方便的定位和理解 - 數(shù)據(jù)血緣追蹤
簡單來說,我們最終給業(yè)務呈現(xiàn)的是一個能直接使用的業(yè)務表,但是他的來源有很多,如果有一張來源表出問題了,我們希望能夠快速準確的定位到問題,并清楚他的危害范圍 - 減少重復開發(fā)
規(guī)范數(shù)據(jù)分層,開發(fā)一些通用的中間層數(shù)據(jù),能夠極大的減少重復計算 - 復雜問題簡單化
把一個復雜的任務分解成多個步驟來完成,每一層只處理單一的步驟,比較簡單和容易理解.而且便于維護數(shù)據(jù)的準確性,當數(shù)據(jù)出現(xiàn)問題之后,可以不用修復所有的數(shù)據(jù),只需要從有問題的步驟開始修復
5.2.數(shù)據(jù)分層
每個企業(yè)根據(jù)自己的業(yè)務需求,可以把數(shù)據(jù)分成不同的層次,但是最基礎的分層思想,理論上數(shù)據(jù)分三個層,數(shù)據(jù)運營層 數(shù)據(jù)倉庫層 數(shù)據(jù)服務層.基于這個基礎分層之上添加新的分層,來滿足不同的業(yè)務需求
5.2.1.數(shù)據(jù)運營層(ODS)
操作數(shù)據(jù)存儲,也是原始數(shù)據(jù)層,是數(shù)據(jù)源中的數(shù)據(jù),經(jīng)傳說中的ETL裝入本層.數(shù)據(jù)總體上大多是按照源頭業(yè)務系統(tǒng)的分類方式而分類
建模方式及原則
從業(yè)務系統(tǒng)增量抽取,保留時間由業(yè)務需求決定.可分表進行周期存儲,數(shù)據(jù)不做清洗轉(zhuǎn)換與業(yè)務系統(tǒng)數(shù)據(jù)模型保持一致,按主題邏輯劃分
5.2.2.數(shù)據(jù)明細層(DWD)
對ODS層的數(shù)據(jù)進行清洗后的結果,包括但不限于去空值,去臟數(shù)據(jù),去異常值.結構和粒度與ODS保持一直,為DWS層提供來源明細數(shù)據(jù),提供業(yè)務系統(tǒng)細節(jié)數(shù)據(jù)的長期沉淀,為未來分析類需求的擴展提供歷史數(shù)據(jù)支撐
建模方式及原則
為支持數(shù)據(jù)重跑可額外增加數(shù)據(jù)業(yè)務日期字段 可按年月日進行分表 用增量ODS層數(shù)據(jù)和前一天DWD相關表進行merge處理
5.2.3.數(shù)據(jù)服務層(DWS)
在這里,從DWD層中獲得的數(shù)據(jù)按照主題建立各種數(shù)據(jù)模型.例如以研究人的旅游消費為主題的數(shù)據(jù)集中,便可以結合航空公司的登機出行信息,以及銀聯(lián)系統(tǒng)的刷卡記錄,進行結合分析,產(chǎn)生數(shù)據(jù)集.在這里,我們需要了解四個概念:維(dimension) ,事實(Fact), 指標(Index)和粒度(Granularity)
建模方式及原則
- 聚合匯總增加派生事實
- 關聯(lián)其它主題的事實表,本層可能會跨主題域
- 數(shù)據(jù)模型可能采用反范式設計
5.2.4.數(shù)據(jù)應用層(ADS)
該層主要是提供數(shù)據(jù)產(chǎn)品和數(shù)據(jù)分析使用的數(shù)據(jù),包括前端報表 分析圖表 KPI 儀表盤 OLAP 專題等分析,一般會存放在ES MySQL等系統(tǒng)中供線上系統(tǒng)使用,也可能會存在Hive或者Druid中
例如:我們經(jīng)常說的報表數(shù)據(jù),或者說那種大寬表,一般就放在這里
建模方式及原則
- 保持數(shù)據(jù)量小
- 維度建模 星形模型
- 各位維度代理鍵+度量
- 增加數(shù)據(jù)業(yè)務日期字段,支持數(shù)據(jù)重跑
- 不分表存儲
5.2.5.數(shù)據(jù)集市層(DM)
處于DWS和ADS中間,也是按照主題建立各種數(shù)據(jù)模型,但它既可以向數(shù)據(jù)產(chǎn)品和數(shù)據(jù)分析提供數(shù)據(jù),也可以向ADS層提供數(shù)據(jù)形成大寬表.一般把數(shù)據(jù)集市視為小型的數(shù)據(jù)倉庫.如果把公司類比成數(shù)據(jù)倉庫,那么部門就是數(shù)據(jù)集市,某種程度上,數(shù)據(jù)集市就可以等于DWS層
建模方式及原則
- 盡量減少數(shù)據(jù)訪問時計算,優(yōu)化檢索
- 維度建模,星型模型
- 事實拉寬,度量預先計算
- 分表存儲