1. 程式人生 > >數據倉庫Hive

數據倉庫Hive

方法 解釋器 計算 hiveql 內部表 是否 nsh abc 編譯器

數據倉庫

什麽時候需要用到數據倉庫?

一個公司裏面不同項目可能用到不同的數據源,有的存在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