數據倉庫Hive
數據倉庫
什麽時候需要用到數據倉庫?
一個公司裏面不同項目可能用到不同的數據源,有的存在MySQL裏面,又的存在MongoDB裏面,甚至還有些要做第三方數據。
但是現在又想把數據整合起來,進行數據分析。此時數據倉庫(Data Warehouse,DW)就派上用場了。它可以對多種業務數據進行篩選和整合,可以用於數據分析、數據挖掘、數據報表。
數據倉庫的特點
- 主題性:數據倉庫是針對某個主題來進行組織,比如滴滴出行,司機行為分析就是一個主題,所以可以將多種不同的數據源進行整合。而傳統的數據庫主要針對某個項目而言,數據相對分散和孤立。
- 集成性:
數據倉庫需要將多個數據源的數據存到一起,但是這些數據以前的存儲方式不同,所以需要經過抽取、清洗、轉換 - 穩定性:保存的數據是一系列歷史快照,不允許修改,只能分析。
- 時變性:會定期接收到新的數據,反應出最新的數據變化。
總的來說,數據倉庫是將多個數據源的數據按照一定的主題集成起來,因為之前的數據各不相同,所以需要抽取、清洗、轉換。
整合以後的數據不允許隨便修改,只能分析,還需要定期更新。
ETL
上面我們說過,數據倉庫接收的數據源是不同的,要做集成的話,需要抽取、清洗、轉換三個步驟,這就是ETL
(Extract-Transform-Load)
- Extract:數據抽取,就是把數據從數據源讀出來
- Transform:數據轉換,就是把數據轉換為特定的格式
- Load:數據加載,把處理後的數據加載到目標處。
主流的數據倉庫
國內最常用的是一款基於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對應一個文件。
視圖:與傳統數據庫類似,是一個邏輯的表。
參考
本文為什麽是數據倉庫?的筆記
數據倉庫Hive