一、數據倉庫概述
1. 概念
數據倉庫是一個面向主題的、集成的、相對穩(wěn)定的、反映歷史變化的數據集合
目的:支持商業(yè)分析和管理決策
2. 典型結構
包括四個層次:數據源 -> 數據存儲和管理 -> 分析和挖掘引擎 -> 應用

3. 特點
(1) 基本不會修改已保存的數據(即相對穩(wěn)定)
(2) 保留所有歷史數據(即可以反映歷史變化)
二、Hive概述
1. 本質
Hive本身并不支持數據的存儲和處理——它只相當一個面向用戶的編程接口,提供了一種類SQL編程語言(HiveQL),而具體的數據存儲和處理還是依靠HDFS和MapReduce。
Hive被發(fā)明出來的目的是簡化使用以及方便傳統(tǒng)SQL的移植。
2. 與其他組件的關系
(1) Hive依賴HDFS存儲數據
(2) Hive依賴MapReduce處理數據
(3) Hive的ETL環(huán)節(jié)(數據抽取、轉換和加載)常常借助Pig來做
——Pig是類似于Hive的工具,但是比Hive更輕量化,適合做實時交互分析(而非Hive的海量數據批處理)。Pig在ETL環(huán)節(jié)有優(yōu)勢,所以雖然Hive本身也可以做ETL但通常還是會借助Pig。
(4) Hive高延遲,如果需要實時查詢應放棄Hive而使用HBase

在具體應用中,Hive和Pig常用于生成報表,因為報表不需要即時性,可以容忍高延遲。而在線業(yè)務等實時性任務應使用HBase等組件。Mahaut集成了許多機器學習算法,常用于數據處理,如商務智能(BI, Business Intellegence)應用的大規(guī)模數據挖掘和分析。

3. 與傳統(tǒng)數據庫對比
| 對比項目 | Hive | 傳統(tǒng)數據庫 |
|---|---|---|
| 數據插入 | 支持批量導入 | 支持單條和批量導入 |
| 數據更新 | 不支持 | 支持 |
| 索引 | 支持 | 支持 |
| 分區(qū) | 支持 | 支持 |
| 執(zhí)行延遲 | 高 | 低 |
| 擴展性 | 好 | 有限 |
三、Hive架構
Hive的三大核心模塊:用戶接口模塊,驅動模塊Driver和元數據存儲模塊Metastore

1. 對外訪問接口
Hive提供多種工具來實現(xiàn)訪問
(1) CLI
一種命令行工具,可直接輸入命令訪問Hive
(2) HWI
Hive Web Interface,是Hive的web接口,可通過瀏覽器訪問數據
(3) JDBC和ODBC
是標準化的開放數據庫連接接口,支持很多應用的開發(fā)
(4) Thrift Server
基于Thrift架構開發(fā)的接口,外界可通過此接口實現(xiàn)對Hive倉庫的RPC調用(Remote Procedure Call,遠程過程調用,允許一臺計算機程序遠程調用另一臺的子程序而不用關系底層網絡通訊)
2. 驅動模塊Driver
Hive的驅動模塊目的就是把HiveQL語句轉換成一系列的MapReduce作業(yè)。
Driver包含編譯器、優(yōu)化器和執(zhí)行器。
3. 元數據存儲模塊Metastore
Metastore專門用于存儲數據倉庫的元數據。它是一個獨立的關系型數據庫,具體實現(xiàn)它的產品可以是Hive自帶的Derby,也可以是其他的產品如MySQL(注意一定是關系型數據庫產品)。
4. 其他訪問Hive的產品
其他訪問Hive的產品有Karmasphere,Hue,Qubole等。
Qubole提供了數據倉庫即服務的功能。它可以把數據倉庫部署在亞馬遜AWS云計算平臺上,而不需要本地部署了。數據倉庫的集群管理都有亞馬遜的服務器完成。
四、Hive HA
Hive HA即Hive High Availability,高可用性Hive解決方案。它用于解決Hive在實際應用中不穩(wěn)定的問題。比如端口調用沒有響應、進程丟失等。

Hive HA方案的基本思路是:
(0) Hive底層事先會存儲大量的多個實例,形成資源池以供訪問。
(1) 設置了統(tǒng)一的訪問接口HA Proxy——外部并不直接訪問底層實例,而是訪問HA Proxy,通過它來轉發(fā)請求。
(2) HA Proxy接到訪問請求后,會對底層的實例進行可用性詢問,即執(zhí)行邏輯可用性測試。如果通過測試則把外部請求轉發(fā)到這個Hive實例上去;如果沒通過就把它加入黑名單(因為它不可用),然后測試下一個Hive實例,直到找到可用的實例才轉發(fā)外部請求。
(3) 每隔一定周期,HA Proxy會統(tǒng)一處理黑名單中的實例。如果重啟成功了可用了,就把它放回資源池中。