Categories
程式開發

網易嚴選質量數倉建設(一)—— 數據倉庫基本概念


對所有組織來說,數據都是重要的財富,數據的存在有兩個目的:操作型記錄的保存以及分析決策的製定。

對於質量保障團隊來說,質量數據能夠客觀反映開發、測試團隊的工作量、工作效率以及工作質量。通過數據指標,查找質量保障工作中的薄弱環節,予以加強;通過數據指標在時間上的縱向對比,反映各項工作開展的效果;通過數據指標在各個團隊之間的橫向對比,找出優秀團隊,借鑒工作經驗。
鑑於以上諸多好處,嚴選質量保障組開展質量數倉建設工作。在建設數據倉庫之前,先了解一些數據倉庫的基本概念。

1. 數據庫&數據倉庫

從廣泛的定義來講,數據庫和數據倉庫的本質其實是一致的或極其相似的,都是通過某個數據庫軟件,基於某種數據模型來組織、管理數據。

而在常見的語義中,數據庫是指傳統的業務數據庫,大部分為關係型數據如,如Mysql、Oracle等。而數據倉庫是用於多元化數據分析的一種體系結構,在數據倉庫的體系中,也存在用來存儲數據的軟件系統,只不過其中數據的組織方式與傳統數據庫不同,不遵循數據庫的設計範式,因此在數據模型的設計上有很大的自由度。

面向業務的數據庫,主要做操作型處理,它是針對具體業務在數據庫聯機的日常操作,通常對少數記錄進行查詢、修改。用戶較為關心操作的響應時間、數據的安全性、完整性和並發支持的用戶數等問題。傳統的數據庫系統作為數據管理的主要手段,主要用於操作型處理。

數據倉庫是一個面向數據分析的集成化數據環境,它可以通過對大量數據進行分析從而得出分析報告並提供決策支持。需要注意的是,數據倉庫本身並不生產數據,同時也不消費數據,它的數據來源於外部,且通常不是一個單一的數據源。

網易嚴選質量數倉建設(一)—— 數據倉庫基本概念 1

2. 數據倉庫的特點

  • 面向主題

業務數據庫中的數據都是面向事務處理進行組織的,但數據倉庫是面向主題存放,其目的是為了更好的組織數據,方面數據查詢分析。

  • 集成的

數據倉庫中的數據來源廣泛,通常會從不同的數據源抽取過來,需要在數據倉庫中對數據進行清洗轉換(編碼統一、屬性度量統一、描述統一、關鍵字統一,也就是ETL),重新編排,得到原始表與數據倉庫表的映射結果。比如,不同系統中,訂單號可能表示為task_id,也可能表示為order_id,當需要訂單主題進行集成時,就需要將訂單號標準化。

  • 相對穩定

數據倉庫的數據通常是批量的方式更新、訪問,所涉及的數據操作主要是數據的查詢,一般情況下並不會進行修改操作。當數據抽取到操作環境中後,只要沒有誤操作,數據不會輕易丟失掩蓋。

  • 反應歷史變化

有的業務數據僅僅保留當前狀態,數據進入數據倉庫後,都會加上時間關鍵字以標記,存儲歷史狀態,以此在時間維度上反映數據變化情況,幫助用戶進行決策分析。

3. 相關概念

  • 數據域

指面向業務分析,將業務過程或者維度進行抽象的集合。數據域是需要抽象提煉,並且長期維護和更新的,但不輕易變動,在劃分數據域時,既能涵蓋當前所有的業務需求,又能在新業務進入時,無影響地被包含進已有的數據域中和擴展新的數據域。

  • 業務過程

指企業的業務活動事件,如下單、支付、退款等,都是業務過程(質量數倉中如提交bug就是業務過程)。業務過程是一個不可拆分的行為事件。

  • 時間週期

用來明確數據統計的時間範圍或者時間點,如近30天,自然週,截至當日等。

  • 修飾詞

指除了統計維度、時間週期以外,指標的業務場景限定抽象。修飾詞隸屬於一種修飾類型,如在流量域訪問終端類型下,有修飾詞PC端、無線端等。

  • 修飾類型

是對修飾詞的一種抽象劃分,例如流量域的訪問終端類型。

  • 主題

主題就是指我們所要分析的具體方面。主題有兩個元素:各個分析角度(維度),二是要分析的具體度量,一般通過數值體現。

維是用於從不同角度描述事物特徵的,一般維都會有多層,每個level都會包含一些共有的或特有的屬性。

  • 度量/原子指標

度量就是要分析的具體的技術指標,一般為數值型數據,是業務定義中不可再拆分的指標,具有明確業務含義的名詞,如支付金額。

  • 維度

維度是度量的環境,用來反映業務的一類屬性,這類屬性的集合構成一個維度,也可以稱為實體對象。維度屬於一個數據域,如地理緯度、時間維度等。

  • 維度屬性

維度屬性隸屬於一個維度,如地理緯度裡面的國家名稱、省份名稱等都屬於維度屬性。

  • 派生指標

派生指標=一個原子指標+多個修飾詞(可選)+時間週期。可以理解為,對原子指標業務統計範圍的圈定。

  • 粒度

數據的細分程度。

  • 事實表

事實表是用來記錄分析的內容的全量信息的,包含了每個事件的具體要素,以及具體發生的事情。事實表中的每行對應一個度量事件,每行的數據是一個特定級別的細節數據,稱為粒度。

  • 維表

維度表包含與業務過程度量事件有關的文本環境,用於描述與“誰、什麼、哪裡、何時”有關的事件。

4. Hadoop系統

網易嚴選質量數倉建設(一)—— 數據倉庫基本概念 2

HDFS

Hadoop分佈式文件處理系統,是Hadoop體系中,數據存儲管理的基礎。源自於Google的GFS論文,也既GFS的克隆版。它是一個高度容錯的系統,能檢測和應對硬件故障,用於在低成本的通用硬件上運行。 HDFS簡化了文件的一致性模型,通過流式數據訪問,提供高吞吐量應用程序數據訪問功能,適合帶有大型數據集的應用程序。

Mapreduce

分佈式計算框架,Hadoop MapReduce是Google Mapreduce克隆版,是一種計算模型,用以進行大數據量的計算。其中Map對數據集上的獨立元素進行指定的操作,生成鍵-值對形式中間結果;Reduce則對中間結果中相同“鍵”的所有“值”進行規約,以得到最終結果。 Mapreduce這樣的功能劃分,非常適合在大量計算機組成的分佈式並行環境裡進行數據處理。

HBase的

Hbase是Google Bigtable的克隆版,是一個針對結構化數據的可伸縮、高可靠、高性能、分佈式和麵向列的動態模式數據庫。和傳統關係數據庫不同,HBase採用了BigTable的數據模型:增強的稀疏排序映射表(Key/Value),其中,鍵由行關鍵字、列關鍵字和時間戳構成。 HBase提供了對大規模數據的隨機、實時讀寫訪問,同時,HBase中保存的數據可以使用MapReduce來處理,它將數據存儲和並行計算完美地結合在一起。

動物園管理員

Zookeeper是Google Chubby克隆版。解決分佈式環境下的數據管理問題:統一命名,狀態同步,集群管理,配置同步等。

Sqoop

Sqoop是SQL-to-Hadoop的縮寫,主要用於傳統數據庫和Hadoop之間傳輸數據。數據的導入和導出本質上是Mapreduce程序,充分利用了MR的並行化和容錯性。

基於Hadoop的數據流系統,由yahoo!開源,設計動機是提供一種基於MapReduce的ad-hoc(計算在query時發生)數據分析工具,定義了一種數據流語言—Pig Latin,將腳本轉換為MapReduce任務在Hadoop上執行。通常用於進行離線分析。

馬豪

數據挖掘算法庫,Mahout的主要目標是創建一些可擴展的機器學習領域經典算法的實現,旨在幫助開發人員更加方便快捷地創建智能應用程序。 Mahout現在已經包含了聚類、分類、推薦引擎(協同過濾)和頻繁集挖掘等廣泛使用的數據挖掘方法。除了算法,Mahout還包含數據的輸入/輸出工具、與其他存儲系統(如數據庫、MongoDB 或Cassandra)集成等數據挖掘支持架構。

水槽

日誌收集工具,Cloudera開源的日誌收集系統,具有分佈式、高可靠、高容錯、易於定制和擴展的特點。它將數據從產生、傳輸、處理並最終寫入目標的路徑的過程抽象為數據流,在具體的數據流中,數據源支持在Flume中定制數據發送方,從而支持收集各種不同協議數據。同時,Flume數據流提供對日誌數據進行簡單處理的能力,如過濾、格式轉換等。此外,Flume還具有能夠將日誌寫往各種數據目標(可定制)的能力。總的來說,Flume是一個可擴展、適合複雜環境的海量日誌收集系統。

蜂巢

由Facebook開源,最初用於解決海量結構化的日誌數據統計問題。 Hive定義了一種類似SQL的查詢語言(HQL),將SQL轉換為MapReduce任務在Hadoop上執行,通常用於離線分析,Hive讓不熟悉MapReduce開發人員也能編寫數據查詢語句,然後這些語句被翻譯為Hadoop上面的MapReduce任務。

Yarn是下一代Hadoop計算平台,主要是為了解決原始Hadoop擴展性差,不支持多計算框架而提出的。 Yarn是一個通用的運行時框架,用戶可以編寫自己的計算框架,在該運行環境中運行,用於自己編寫的框架作為客戶端的一個lib,在提交作業時打包即可。該框架提供了資源管理、資源調度組件。

Tez是Apache最新開源的支持DAG作業的計算框架,它直接源於MapReduce框架,核心思想是將Map和Reduce兩個操作進一步拆分,即Map被拆分成Input、Processor、Sort、Merge和Output, Reduce被拆分成Input、Shuffle、Sort、Merge、Processor和Output等,這樣,這些分解後的元操作可以任意靈活組合,產生新的操作,這些操作經過一些控製程序組裝後,可形成一個大的DAG作業。

火花

Spark是一個通用的並行計算框架,它提供了一個更快、更通用的數據處理平台,與Hadoop相比,Spark能夠讓程序在內存中運行時速度提升百倍。

卡夫卡

Kafka是Linkedin開源的分佈式消息隊列,主要用於處理活躍的流式數據。活躍的流式數據在web網站應用中非常常見,這些數據包括網站的pv、用戶訪問了什麼內容,搜索了什麼內容等。這些數據通常以日誌的形式記錄下來,然後每隔一段時間進行一次統計處理。

安巴里

Apache Ambari 的作用來說,就是創建、管理、監視Hadoop 的集群,是為了讓Hadoop 以及相關的大數據軟件更容易使用的一個web工具。

作者簡介

婧雯,網易嚴選資深測試工程師,2014年畢業於北京理工大學,2017年加入網易。參與數據產品技術部多個重點產品質量保障工作,建設並完善數據產品部質量保障體系,致力於質量保障工作效能得提升。