數據倉庫
什么時候需要用到數據倉庫?
一個公司里面不同項目可能用到不同的數據源,有的存在MySQL里面,又的存在MongoDB里面,甚至還有些要做第三方數據。
但是現在又想把數據整合起來,進行數據分析。此時數據倉庫(Data Warehouse,DW)就派上用場了。它可以對多種業務數據進行篩選和整合,可以用于數據分析、數據挖掘、數據報表。
數據倉庫的特點
- 主題性:數據倉庫是針對某個主題來進行組織,比如滴滴出行,司機行為分析就是一個主題,所以可以將多種不同的數據源進行整合。而傳統的數據庫主要針對某個項目而言,數據相對分散和孤立。
- 集成性:
數據倉庫需要將多個數據源的數據存到一起,但是這些數據以前的存儲方式不同,所以需要經過抽取、清洗、轉換的過程 - 穩定性:保存的數據是一系列歷史快照,不允許修改,只能分析。
- 時變性:會定期接收到新的數據,反應出最新的數據變化。
總的來說,數據倉庫是將多個數據源的數據按照一定的主題集成起來,因為之前的數據各不相同,所以需要抽取、清洗、轉換。
整合以后的數據不允許隨便修改,只能分析,還需要定期更新。
ETL
上面我們說過,數據倉庫接收的數據源是不同的,要做集成的話,需要抽取、清洗、轉換三個步驟,這就是ETL
(Extract-Transform-Load)
- Extract:數據抽取,就是把數據從數據源讀出來
- Transform:數據轉換,就是把數據轉換為特定的格式
-
Load:數據加載,把處理后的數據加載到目標處。
image.png
主流的數據倉庫
國內最常用的是一款基于Hadoop的開源數據倉庫,名為Hive
,它可以對存儲在HDFS的文件數據進行查詢、分析。
Hive對外可以提供HiveQL,這是類似于SQL語言的一種查詢語言。在查詢時可以將HiveQL語句轉換為MapReduce任務,在Hadoop層進行執行。
Hive的最大優勢在于免費,那其他知名的商業數據倉庫有那些呢?比如Oracle,DB2,其中業界老大是Teradata
Teradata數據倉庫支持大規模并行處理平臺(MPP),可以高速處理海量實際上,性能遠遠高于Hive。對企業來說,只需要專注于業務,節省管理技術方面的精力,實現ROI(投資回報率)最大化。
Hive
上面提到了Hive是最著名的開源數據倉庫,它是Hadoop生態中一個重要的組件。
Hadoop的生態中,HDFS解決了分布式存儲的問題,MapReduce解決了分布式計算的問題,而HBASE則提供了一種NoSQL的存儲方法。
但是如果需要的HDFS上的文件或者HBASE的表進行查詢,需要自定義MapReduce方法。那么Hive其實就是在HDFS上面的一個中間層,它可以讓業務人員直接使用SQL進行查詢。
所以Hive是用進行數據提取轉換加載的,而且它可以把SQL轉換為MapReduce任務,而Hive的表就是HDFS的目錄或者文件。
Hive的體系架構
上圖為Hive的體系結構
首先是接入Hive的客戶端,可以通過CLI命令行方式,也可以是Hive的Client直接連接到Hive Server中。還可以是Web瀏覽器直接訪問
-
之前我們提到過Hive的表就是HDFS中的一個文件,所以Hive還會將表的相關屬性單獨列出來,為了方便檢索,可以存放在MySQL、derby等數據庫里面。
這些數據就是元數據信息,比如表是否為外部表,數據存放在哪個目錄等等。
Hive和MySQL既可以在同一臺服務器上,又可以在不同的機器上。
另外Hive還需要對SQL語句進行解析,所以和數據庫一樣,它也有解釋器、編譯器、優化器等等,而且還會生成查詢計劃,存儲在HDFS中,然后由MapReduce進行調用。
Hive的數據模型
Hive主要包含以下幾種數據模型:
Hive數據庫:類似于傳統數據庫
內部表,與傳統數據庫的Table一樣,每個Table都在Hive中有一個目錄進行對應。刪除表時,元數據和保存的實際數據都會刪除掉
-
外部表:
外部表就類似于一個快捷方式或者說一個指針,指向HDFS已經存在的數據。
Partition:也就是對列進行密集索引
-
桶:
Hive的桶是對表的每一列進行Hash,然后根據Hash值切分數據,這樣每一個Bucket對應一個文件。
視圖:與傳統數據庫類似,是一個邏輯的表。
參考
本文為什么是數據倉庫?的筆記