4.Hive中的ODS、 DWD、 DWS、 ADS 數倉分層


1、數據倉庫

  我們常提的數倉(DataWarehouse),就是在我們已有的數據庫(他是對數據的存儲)的基礎之上,增加了對數據的OLAP(On-Line Analytical Processing),支持復雜的數據分析操作,更側重決策支持,提供直觀易懂的查詢結果,而數據庫更着重的是事務處理。換句話講,就是在數據庫已經大量存在的情況下,進一步挖掘數據資源,它包括了一整套的ETL、調度、建模在內的完整理論體系。

  一句話概括:  

    數據庫面向事務處理任務;數據倉庫中的數據是按照一定的主題域進行組織主題。

2、數據庫和數倉區別:

 

  DW 數據庫
用途 專門為數據分析設計的,涉及讀取大量數據以了解數據之間的關系和趨勢 用於捕獲和存儲數據
特性 數據倉庫 事務數據庫
適合的工作負載 分析、報告、大數據 事務處理
數據源 從多個來源收集和標准化的數據 從單個來源(例如事務系統)捕獲的數據
數據捕獲 批量寫入操作通過按照預定的批處理計划執行 針對連續寫入操作進行了優化,因為新數據能夠最大程度地提高事務吞吐量
數據標准化 非標准化schema,例如星型Schema或雪花型schema 高度標准化的靜態schema
數據存儲 使用列式存儲進行了優化,可實現輕松訪問和高速查詢性能 針對在單行型物理塊中執行高吞吐量寫入操作進行了優化
數據訪問 為最小化I/O並最大化數據吞吐量進行了優化 大量小型讀取操作

3、Hive中的數據分層

  理論上一般分為三個層:ODS數據運營層、DW數據倉庫層、ADS數據服務層。基於這個基礎分層之上,再提交信息的層次,來滿足不同的業務需求。

  3.1數據運營層(ODS):原始數據

  ODS:Operation Data Store 數據准備區,也稱為貼源層。數據倉庫源頭系統的數據表通常會原封不動的存儲一份,稱為ODS層,是后續數據倉庫加工數據的來源。
ODS層數據的來源方式:

  1. 業務庫 : 經常會使用sqoop來抽取,例如每天定時抽取一次。
    實時方面,可以考慮用canal監聽mysql的binlog,實時接入即可。
  2. 埋點日志 :  日志一般以文件的形式保存,可以選擇用flume定時同步
    可以用spark streaming或者Flink來實時接入
  3. 消息隊列:即來自ActiveMQ、Kafka的數據等.

  3.2數據倉庫層(DW):數據清洗,建模

  DW數據分層,由下到上為DWD(數據明細層),DWM(數據中間層),DWS(數據服務層)。從 ODS 層中獲得的數據按照主題建立各種數據模型。這一層和維度建模會有比較深的聯系。

  1>  DWD:data warehouse details 細節數據層,是業務層與數據倉庫的隔離層。主要對ODS數據層做一些數據清洗和規范化的操作。(依企業業務需求)
數據清洗:去除空值、臟數據、超過極限范圍的

這一層主要是保證數據的質量和完整,方便后續層中特征分析


  2>  DWM:也有的稱為DWB(data warehouse base) 數據基礎層,對數據進行輕度聚合,存儲的是客觀數據,一般用作中間層,可以認為是大量指標的數據層。

  這里最容易搞混,實際生產中甚至跳過這個,只有dwd和dws層,其實嚴格要求上來講,dwd層數據來源於生產系統,只對數據負責,別的不考慮。而到了dwm層,已經開始向我們的業務層靠攏,要根據數據來進行分析和輕度聚合,進行細粒度統計和沉淀。


  3>  DWS:data warehouse service 數據服務層,基於DWB上的基礎數據,整合匯總成分析某一個主題域的服務數據層,一般是寬表。按照業務進行划分:流量、用戶、訂單....用於提供后續的業務查詢,OLAP分析,數據分發等。

在這一層我們還會建立維度模型,常見的有雪花模型和星型模型。維度建模一般按照以下四個步驟:

  1. 選擇業務過程  2. 聲明粒度  3. 確定維度  4. 確定事實。

這一層主要對ODS/DWD層數據做一些匯總。我們希望80%的業務都能通過我們的DWS層計算,而不是ODS。

  3.3數據服務層/應用層(ADS):出報表

  ADS:applicationData Service應用數據服務,該層主要是提供數據產品和數據分析使用的數據,一般會存儲在ES、mysql等系統中供線上系統使用。
我們通過說的報表數據,或者說那種大寬表,一般就放在這里。

 

4  數據來源

數據主要會有兩個大的來源:

業務庫,這里經常會使用 Sqoop 來抽取

在實時方面,可以考慮用 Canal 監聽 Mysql 的 Binlog,實時接入即可。

埋點日志,線上系統會打入各種日志,這些日志一般以文件的形式保存,我們可以選擇用 Flume 定時抽取,也可以用用 Spark Streaming 或者 Storm 來實時接入,當然,Kafka 也會是一個關鍵的角色。

還有使用filebeat收集日志,打到kafka,然后處理日志

注意: 在這層,理應不是簡單的數據接入,而是要考慮一定的數據清洗,比如異常字段的處理、字段命名規范化、時間字段的統一等,一般這些很容易會被忽略,但是卻至關重要。特別是后期我們做各種特征自動生成的時候,會十分有用。

 

  總結:

  1. 原始數據拉取過來,保持和元數據同步,不做處理形成ODS層;

  2. 基於ODS層,保持數據原始粒度,對數據加工和處理(也就是清洗),提供干凈的數據作DWD層;

  3. 根據ODS和DWD層數據,進行輕度匯總,保留較多維度,形成DWM層;

  4. 基於以上所有DW層數據,進行高度匯總,形成DWS層。

 

  DWS會做高度匯總,DWD和ODS粒度相同。

 

 

 

 參考:

  https://www.cnblogs.com/itboys/p/10592871.html

 

 

 


免責聲明!

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



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