大數(shù)據(jù)之數(shù)據(jù)倉庫分層
大數(shù)據(jù)之數(shù)據(jù)倉庫分層
- 什么是數(shù)據(jù)分層?
- 數(shù)據(jù)分層的好處
- 一種通用的數(shù)據(jù)分層設計
- 舉例
- 各層會用到的計算引擎和存儲系統(tǒng)
- 分層實現(xiàn)
- 數(shù)據(jù)分層的一些概念說明 7.大數(shù)據(jù)相關(guān)基礎概念
1. 什么是數(shù)據(jù)分層?
數(shù)據(jù)分層是一套行之有效的數(shù)據(jù)組織和管理方法,使得數(shù)據(jù)體系更有序。
2. 數(shù)據(jù)分層的好處
(1)清晰數(shù)據(jù)結(jié)構(gòu)
每一個數(shù)據(jù)分層都有它的作用域和職責,在使用表的時候能更方便的定位和理解。
(2)減少重復開發(fā)
規(guī)范數(shù)據(jù)分層,開發(fā)一些通用的中間層數(shù)據(jù),能夠減少極大的重復計算。
(3)統(tǒng)一數(shù)據(jù)口徑
通過數(shù)據(jù)分層,提供統(tǒng)一的數(shù)據(jù)出口,統(tǒng)一對外輸出的數(shù)據(jù)口徑。
(4)復雜問題簡單化
將一個復雜的任務分解成多個步驟完成,每一層解決特定的問題。
一種通用的數(shù)據(jù)分層設計
- ODS:存放原始數(shù)據(jù)
- DW:存放數(shù)倉中間層數(shù)據(jù)
- APP:面向業(yè)務定制的應用數(shù)據(jù)

3. 舉例
以下是一個電商網(wǎng)站的數(shù)據(jù)體系設計,只關(guān)注用戶訪問日志這部分數(shù)據(jù)。

4. 各層會用到的計算引擎和存儲系統(tǒng)

5.分層實現(xiàn)

在確定建模思路和模型類型之后,下一步的工作是數(shù)據(jù)分層。數(shù)據(jù)分層可以使得數(shù)據(jù)構(gòu)建體系更加清晰,便于數(shù)據(jù)使用者快速對數(shù)據(jù)進行定位;同時數(shù)據(jù)分層也可以簡化數(shù)據(jù)加工處理流程,降低計算復雜度。
我們常用的數(shù)據(jù)倉庫的數(shù)據(jù)分層通常分為集市層、中間層、基礎數(shù)據(jù)層上下三層結(jié)構(gòu)。由傳統(tǒng)的多層結(jié)構(gòu)減少到上下三層結(jié)構(gòu)的目的是為了壓縮整體數(shù)據(jù)處理流程的長度,同時扁平化的數(shù)據(jù)處理流程有助于數(shù)據(jù)質(zhì)量控制和數(shù)據(jù)運維。
在上下三層的結(jié)構(gòu)的右側(cè),我們增加了流式數(shù)據(jù),將其添加成數(shù)據(jù)體系的一部分。這是因為當前的數(shù)據(jù)應用方向會越來越關(guān)注數(shù)據(jù)的時效性,越實時的數(shù)據(jù)價值度越高。
但是,由于流式數(shù)據(jù)集的采集、加工和管理的成本較高,一般都會按照需求驅(qū)動的方式建設;此外,考慮到成本因素,流式數(shù)據(jù)體系的結(jié)構(gòu)更加扁平化,通常不會設計中間層。
下面來具體看下每一層的具體作用。
數(shù)據(jù)基礎層

數(shù)據(jù)基礎層主要完成的工作包括以下幾點:
- 數(shù)據(jù)采集:把不同數(shù)據(jù)源的數(shù)據(jù)統(tǒng)一采集到一個平臺上;
- 數(shù)據(jù)清洗,清洗不符合質(zhì)量要求的數(shù)據(jù),避免臟數(shù)據(jù)參與后續(xù)數(shù)據(jù)計算;
- 數(shù)據(jù)歸類,建立數(shù)據(jù)目錄,在基礎層一般按照來源系統(tǒng)和業(yè)務域進行分類;
- 數(shù)據(jù)結(jié)構(gòu)化,對于半結(jié)構(gòu)化和非結(jié)構(gòu)化的數(shù)據(jù),進行結(jié)構(gòu)化;
- 數(shù)據(jù)規(guī)范化,包括規(guī)范維度標識、統(tǒng)一計量單位等規(guī)范化操作。
數(shù)據(jù)中間層

數(shù)據(jù)中間層最為重要的目標就是把同一實體不同來源的數(shù)據(jù)打通起來,這是因為當前業(yè)務形態(tài)下,同一實體的數(shù)據(jù)可能分散在不同的系統(tǒng)和來源,且這些數(shù)據(jù)對同一實體的標識符可能不同。此外,數(shù)據(jù)中間層還可以從行為中抽象關(guān)系。從行為中抽象出來的基礎關(guān)系,會是未來上層應用一個很重要的數(shù)據(jù)依賴。例如抽象出的興趣、偏好、習慣等關(guān)系數(shù)據(jù)是推薦、個性化的基礎生產(chǎn)資料。
在中間層,為了保證主題的完整性或提高數(shù)據(jù)的易用性,經(jīng)常會進行適當?shù)臄?shù)據(jù)冗余。比如某一實事數(shù)據(jù)和兩個主題相關(guān)但自身又沒有成為獨立主題,則會放在兩個主題庫中;為了提高單數(shù)據(jù)表的復用性和減少計算關(guān)聯(lián),通常會在事實表中冗余部分維度信息。
數(shù)據(jù)集市層

數(shù)據(jù)集市層是上下三層架構(gòu)的最上層,通常是由需求場景驅(qū)動建設的,并且各集市間垂直構(gòu)造。在數(shù)據(jù)集市層,我們可以深度挖掘數(shù)據(jù)價值。值得注意的是,數(shù)據(jù)集市層需要能夠快速試錯。
數(shù)據(jù)架構(gòu)

數(shù)據(jù)架構(gòu)包括數(shù)據(jù)整合、數(shù)據(jù)體系、數(shù)據(jù)服務三部分。其中,數(shù)據(jù)整合又可以分為結(jié)構(gòu)化、半結(jié)構(gòu)化、非結(jié)構(gòu)化三類。
數(shù)據(jù)整合

結(jié)構(gòu)化數(shù)據(jù)采集又可細分為全量采集、增量采集、實時采集三類。三種采集方式的各自特點和適應場合如上圖所示,其中全量采集的方式最為簡單;實時采集的采集質(zhì)量最難控制。

在傳統(tǒng)的架構(gòu)中,日志的結(jié)構(gòu)化處理是放在數(shù)倉體系之外的。在大數(shù)據(jù)平臺倉庫架構(gòu)中,日志在采集到平臺之前不做結(jié)構(gòu)化處理;在大數(shù)據(jù)平臺上按行符分割每條日志,整條日志存儲在一個數(shù)據(jù)表字段;后續(xù),通過UDF或MR計算框架實現(xiàn)日志結(jié)構(gòu)化。
在我們看來,日志結(jié)構(gòu)越規(guī)范,解析成本越低。在日志結(jié)構(gòu)化的過程中,并不一定需要完全平鋪數(shù)據(jù)內(nèi)容,只需結(jié)構(gòu)化出重要常用字段;同時,為了保障擴展性,我們可以利用數(shù)據(jù)冗余保存原始符合字段(如useragent字段)。

非結(jié)構(gòu)化的數(shù)據(jù)需要結(jié)構(gòu)化才能使用。非結(jié)構(gòu)化數(shù)據(jù)特征提取包括語音轉(zhuǎn)文本、圖片識別、自然語言處理、圖片達標、視頻識別等方式。盡管目前數(shù)倉架構(gòu)體系中并不包含非結(jié)構(gòu)化數(shù)據(jù)特征提取操作,但在未來,這將成為可能。
數(shù)據(jù)服務化

數(shù)據(jù)服務化包括統(tǒng)計服務、分析服務和標簽服務:
- 統(tǒng)計服務主要是偏傳統(tǒng)的報表服務,利用大數(shù)據(jù)平臺將數(shù)據(jù)加工后的結(jié)果放入關(guān)系型數(shù)據(jù)庫中,供前端的報表系統(tǒng)或業(yè)務系統(tǒng)查詢;
- 分析服務用來提供明細的事實數(shù)據(jù),利用大數(shù)據(jù)平臺的實時計算能力,允許操作人員自主靈活的進行各種維度的交叉組合查詢。分析服務的能力類似于傳統(tǒng)cube提供的內(nèi)容,但是在大數(shù)據(jù)平臺下不需要預先建好cube,更靈活、更節(jié)省成本;
- 標簽服務,大數(shù)據(jù)的應用場景下,經(jīng)常會對主體進行特征刻畫,比如客戶的消費能力、興趣習慣、物理特征等等,這些數(shù)據(jù)通過打標簽轉(zhuǎn)換成KV的數(shù)據(jù)服務,用于前端應用查詢。
6.數(shù)據(jù)分層的一些概念說明
大數(shù)據(jù)數(shù)據(jù)倉庫是基于HIVE構(gòu)建的數(shù)據(jù)倉庫,分布文件系統(tǒng)為HDFS,資源管理為Yarn,計算引擎主要包括MapReduce/Tez/Spark等,分層架構(gòu)說明如下:
- 數(shù)據(jù)來源層:日志或者關(guān)系型數(shù)據(jù)庫,并通過Flume、Sqoop、Kettle等etl工具導入到HDFS,并映射到HIVE的數(shù)據(jù)倉庫表中。
- 事實表是數(shù)據(jù)倉庫結(jié)構(gòu)中的中央表,它包含聯(lián)系事實與維度表的數(shù)字度量值和鍵。事實數(shù)據(jù)表包含描述業(yè)務(例如產(chǎn)品銷售)內(nèi)特定事件的數(shù)據(jù)。
- 維度表是維度屬性的集合。是分析問題的一個窗口。是人們觀察數(shù)據(jù)的特定角度,是考慮問題時的一類屬性,屬性的集合構(gòu)成一個維。數(shù)據(jù)庫結(jié)構(gòu)中的星型結(jié)構(gòu),該結(jié)構(gòu)在位于結(jié)構(gòu)中心的單個事實數(shù)據(jù)表中維護數(shù)據(jù),其它維度數(shù)據(jù)存儲在維度表中。每個維度表與事實數(shù)據(jù)表直接相關(guān),且通常通過一個鍵聯(lián)接到事實數(shù)據(jù)表中。星型架構(gòu)是數(shù)據(jù)倉庫比較流向的一種架構(gòu)。
星型模式的基本思想就是保持立方體的多維功能,同時也增加了小規(guī)模數(shù)據(jù)存儲的靈活性。
說明:
- 事實表就是你要關(guān)注的內(nèi)容;
- 維度表就是你觀察該事務的角度,是從哪個角度去觀察這個內(nèi)容的。
例如,某地區(qū)商品的銷量,是從地區(qū)這個角度觀察商品銷量的。事實表就是銷量表,維度表就是地區(qū)表
4、主題表:主題(Subject)是在較高層次上將企業(yè)信息系統(tǒng)中的數(shù)據(jù)進行綜合、歸類和分析利用的一個抽象概念,每一個主題基本對應一個宏觀的分析領域。在邏輯意義上,它是對應企業(yè)中某一宏觀分析領域所涉及的分析對象。例如“銷售分析”就是一個分析領域,因此這個數(shù)據(jù)倉庫應用的主題就是“銷售分析”。
面向主題的數(shù)據(jù)組織方式,就是在較高層次上對分析對象數(shù)據(jù)的一個完整并且一致的描述,能刻畫各個分析對象所涉及的企業(yè)各項數(shù)據(jù),以及數(shù)據(jù)之間的聯(lián)系。所謂較高層次是相對面向應用的數(shù)據(jù)組織方式而言的,是指按照主題進行數(shù)據(jù)組織的方式具有更高的數(shù)據(jù)抽象級別。與傳統(tǒng)數(shù)據(jù)庫面向應用進行數(shù)據(jù)組織的特點相對應,數(shù)據(jù)倉庫中的數(shù)據(jù)是面向主題進行組織的。例如,一個生產(chǎn)企業(yè)的數(shù)據(jù)倉庫所組織的主題可能有產(chǎn)品訂貨分析和貨物發(fā)運分析等。而按應用來組織則可能為財務子系統(tǒng)、銷售子系統(tǒng)、供應子系統(tǒng)、人力資源子系統(tǒng)和生產(chǎn)調(diào)度子系統(tǒng)。
5、匯總數(shù)據(jù)層:聚合原子粒度事實表及維度表,為滿足固定分析需求,以提高查詢性能為目的,形成的高粒度表,如周報、月報、季報、年報等。
6、應用層:
為應用層,這層數(shù)據(jù)是完全為了滿足具體的分析需求而構(gòu)建的數(shù)據(jù),也是星形結(jié)構(gòu)的數(shù)據(jù)。應用層為前端應用的展現(xiàn)提現(xiàn)數(shù)據(jù),可以為關(guān)系型數(shù)據(jù)庫組成。
7、【補充】
數(shù)據(jù)緩存層:
- 用于存放接口方提供的原始數(shù)據(jù)的數(shù)據(jù)庫層,此層的表結(jié)構(gòu)與源數(shù)據(jù)保持基本一致,數(shù)據(jù)存放時間根據(jù)數(shù)據(jù)量大小和項目情況而定,如果數(shù)據(jù)量較大,可以只存近期數(shù)據(jù),將歷史數(shù)據(jù)進行備份。此層的目的在于數(shù)據(jù)的中轉(zhuǎn)和備份。
臨時數(shù)據(jù)表層:
- 存放臨時測試數(shù)據(jù)表(Temp表),或者中間結(jié)果集的表。
7. 大數(shù)據(jù)相關(guān)基礎概念
- 數(shù)據(jù)源:業(yè)務系統(tǒng)、埋點、爬蟲
- PG:PostgreSQL,一種關(guān)系型數(shù)據(jù)庫
- Sqoop:是一個在結(jié)構(gòu)化數(shù)據(jù)(mysql/oracle)和Hadoop(Hive)之間進行批量數(shù)據(jù)遷移的工具
- Flume:是一個分布式、可靠、高可用的海量日志采集、聚合和傳輸?shù)南到y(tǒng)。支持在日志系統(tǒng)中定制各類數(shù)據(jù)發(fā)送方,用于收集數(shù)據(jù);提供對數(shù)據(jù)進行簡單處理,并寫到各種數(shù)據(jù)接受方(HDFS\Hbase)的能力。
- Kafka:是一個分布式、支持分區(qū)的、多副本的,基于zookeeper協(xié)調(diào)的分布式消息系統(tǒng)。
- Flink:一個流式的數(shù)據(jù)流執(zhí)行引擎。針對數(shù)據(jù)流的分布式計算提供了數(shù)據(jù)分布、數(shù)據(jù)通信以及容錯機制等功能。
- Kylin:是一個開源的分布式分析引擎,提供Hadoop/Spark之上的SQL查詢接口及多維分析(OLAP)能力一直吃超大規(guī)模數(shù)據(jù)。能在亞秒內(nèi)查詢巨大的Hive表。
- ES:elasticsSearch,是一個高擴展、開源的全文檢索和分析引擎,可準實時地快速存儲、搜索、分析海量的數(shù)據(jù)。
- Hadoop:是一個分布式系統(tǒng)基礎架構(gòu),可使用戶在不了解分布式底層細節(jié)的情況下開發(fā)分布式程序,充分利用集群的威力進行高速運算和存儲。兩大核心:HDFS\MapReduce
- HDFS:是可擴展、容錯、高性能的分布式文件系統(tǒng),異步復制,一次寫入多次讀取,主要負責存儲。
- MapReduce:分布式計算框架。
- Spark:是一個專為大規(guī)模數(shù)據(jù)處理而設計的快速通用的計算引擎。