Hive架構

尊淵發表於2019-02-12

[toc]

概念

按照官網翻譯,Hive是一個使用SQL管理和使用基於分散式儲存的資料集的資料倉儲工具軟體。注意形容詞知道了幾個特點:

  1. 使用SQL
  2. 資料倉儲、管理資料集(表)
  3. 基於Hadoop

Hive的元件包括HCatalog和WebHCat。

  • HCatalog是Hadoop的表和儲存管理層,它使具有不同資料處理工具(包括Pig和MapReduce)的使用者能夠更輕鬆地在網格上讀寫資料。
  • WebHCat提供了一種服務,可用於執行Hadoop MapReduce(或YARN),Pig,Hive作業。還可以使用HTTP(REST樣式)介面執行Hive後設資料操作。

架構

照例先說下架構圖
元件架構

這裡可以看到非常明確的元件關係。資料以檔案形式儲存在HDFS,執行期間使用者通過cli提交DDL 或者query SQL,DDL會與MetaStore互動,其中MetaStore負責儲存所有表資訊(meta),二querySQL會提交給Hive QL來做執行,這個通用資料庫都包含這樣的模組。其中包含sql解析,執行計劃生成和MR執行,會將sql以MR來執行。

MetaStore

MetaStore負責儲存所有的表schema和SerDe庫,還有表的HDFS地址等。Hive的表是以HDFS的檔案儲存的,資料模型如下:
資料模型

執行

通常的sql引擎執行sql的能力其實沒有太多的要說的,hive會將sql解析為一個執行計劃來執行MapReduce,比如對於一個sql

select a,count(1) from t where c=1 group by a;

Hive會將其轉換為一個執行計劃比如下圖:
執行計劃

調優

因為本質上是分散式MapReduce模式,因此在寫Hive SQL時,我們要了解不同表的資料量和資料分佈,在group by聚合以及join操作時避免傾斜。Hive本身LanguageManuel[6]中有對於Join Optimization的介紹,包括了MapJoin的hint以及SMB join優化等。而阿里的ODPS(MaxCompute)服務也在2018年推出了Hash Clustering 和 Range Clustering特性。

總結

這是一篇非常簡略的筆記,因為本身hive就很簡單,但是具體數倉ETL研發過程中的變化和策略是非常多的。開篇後,希望後續有持續的積累和記錄。

圖片和內容引用

[4] https://www.slideshare.net/athusoo/hive-apachecon-2008-presentation?from_action=save
[5] https://www.slideshare.net/namit_jain/hive-demo-paper-at-vldb-2009
[6] https://cwiki.apache.org/confluence/display/Hive/LanguageManual


相關文章