天天看點

Hive架構

[toc]

概念

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

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

Hive的元件包括HCatalog和WebHCat。

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

架構

照例先說下架構圖

Hive架構

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

MetaStore

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

Hive架構

執行

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

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

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

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