Hive Basics

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引擎是通用的
  • 支持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語句解析流程: 
    1. 輸入SQL語句
    2. 生成抽象語法樹
    3. 優化成邏輯執行計畫
    4. 優化成物理執行計畫
    5. 生成MapReduece作業
  • Metastore
    • 儲存Metadata。
    • Hive預設使用Derby儲存Metadata,但Derby只支持單用戶操作。
    • 可以使用MySQL或Oracle等資料庫替換。

Terms

  • Structure Data:
    • 能使用二維表描述的資料。
  • Vectorized Query Execution
    • 降低常用查詢操作的CPU使用率。
    • 一次對一個Block內的數據同時讀取並處理,一個Block包含1024行數據。
    • 使用相對較少的指令,並在更短的時間內完成操作。
  • Cost-Based Optimizer(CBO)
    • 基於所有執行路徑的執行代價,挑選其中代價最小的執行路徑。
    • 使用分而治之策略,先計算路徑上每個節點的執行代價,最後加總後決策。
    • 每個節點的執行代價計算是基於參與計算的數據集的基本訊息,以及節點的計算成本綜合得出。