Hive Basics
Introduction
- 提供一套SQL語句,稱為Hive QL,作用於分布式存儲系統的文件之上。
- 為儲存於分布式存儲系統上的結構化數據文件加上schema的概念,映射為一張數據表,便於應用SQL語句進行操作。
- 將Client提交的SQL語句,解析並轉換成對應的作業。最終通過計算框架完成操作後,將計算結果返回給Client。
- 提供命令行工具與JDBC驅動,用於連接Client與Hive。
- 底層支持MapReduce(Hive on MapReduce)、Spark(Hive on Spark)、Tez(Hive on Tez)
- MapReduce雖然性能慢,但是相對於Spark較為穩定,所以大部分生產環境還是跑Hive on MapReduce
- 支持多種文件壓縮與存儲格式。
Why Hive
- 省去撰寫與維護MapReduce程式的繁雜過程。
- 讓熟悉SQL語法的用戶能快速上手使用HDFS上的數據,並利用SQL語言進行查詢、匯總,以及分析數據。
- 解決傳統的關聯型數據庫(RMDB)在大數據處理上的瓶頸。
Advantages of using Hive
- 快速開發的能力
- 擴展能力強
- 統一的元數據管理
- Metastore
- Database Metadata: location, owner, name
- Table Metadata: name, own, location, column, name/type/index, createtime
- 和Spark/Impala等SQL引擎是通用的
- Metastore
- 支持udf函數
Hive History
下列為Hivez發展歷史中的重要時間點:
Date | Version | Stinger version | Feature |
---|---|---|---|
2008/8 | facebook releases Hive | ||
2013/05 | hive-0.11 | Stinger Phase 1 | ORC/HiveServer2 |
2013/10 | hive-0.12 | Stinger Phase 2 | ORC improvement |
2013/08 | hive-0.13 | Stinger Phase 3 | Tez/Vectorized query execution/Cost-based optimizer(CBO) |
2014/09 | hive-0.13 | Stinger.next | SQL:2011 |
Stinger為Hortonwork所開源的專案,目的是為了提高Hive的性能,並支持更多的SQL。
Hive(on MapReduce) Architecture
- Hive本身不存儲和計算數據,完全依賴於HDFS和MapReduce。
- Hive為一個客戶客戶端工具,將SQL語句轉換為相對應的MapReduce作業,然後在Hadoop上進行運算,最終Hadoop直接將結果回覆給Client。
- Hive無須部署在所有的集群節點上。
- SQL語句解析流程:
- 輸入SQL語句
- 生成抽象語法樹
- 優化成邏輯執行計畫
- 優化成物理執行計畫
- 生成MapReduece作業
- Metastore
- 儲存Metadata。
- Hive預設使用Derby儲存Metadata,但Derby只支持單用戶操作。
- 可以使用MySQL或Oracle等資料庫替換。
Terms
- Structure Data:
- 能使用二維表描述的資料。
- Vectorized Query Execution
- 降低常用查詢操作的CPU使用率。
- 一次對一個Block內的數據同時讀取並處理,一個Block包含1024行數據。
- 使用相對較少的指令,並在更短的時間內完成操作。
- Cost-Based Optimizer(CBO)
- 基於所有執行路徑的執行代價,挑選其中代價最小的執行路徑。
- 使用分而治之策略,先計算路徑上每個節點的執行代價,最後加總後決策。
- 每個節點的執行代價計算是基於參與計算的數據集的基本訊息,以及節點的計算成本綜合得出。