Hive架構
[toc]
概念
按照官網翻譯,Hive是一個使用SQL管理和使用基於分散式儲存的資料集的資料倉儲工具軟體。注意形容詞知道了幾個特點:
- 使用SQL
- 資料倉儲、管理資料集(表)
- 基於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
相關文章
- Hive簡介、應用場景及架構原理Hive架構
- 架構之:serverless架構架構Server
- 【細品架構4/100】架構之架構切分架構
- SaaS架構:流程架構分析架構
- 單體架構&微服務架構&中臺服務架構架構微服務
- 架構師修煉之道(二)——架構?設計?架構師?架構
- 前端架構之小小node架構前端架構
- 單體架構到垂直架構架構
- 架構之:資料流架構架構
- 架構架構
- 架構演進之「微服務架構」架構微服務
- MySQL 高可用架構之 MMM 架構MySql架構
- 【架構分析】MESA (EGL/GLES)架構分析架構
- 架構之:軟體架構漫談架構
- 架構之:微服務架構漫談架構微服務
- 解決方案架構、系統架構和企業架構區別架構
- 架構C01: 什麼是架構?為什麼做架構?架構師需要做什麼?架構
- Hive:資料倉儲構建步驟Hive
- 架構師眼中的高併發架構架構
- Spring Cloud雲架構-Restful 基礎架構SpringCloud架構REST
- 軟體架構風格——規則架構架構
- 架構設計之架構的演變架構
- 架構設計之一——基礎架構架構
- 軟體架構模式之微服務架構架構模式微服務
- 看阿里P9架構師如何向你定義架構及架構師阿里架構
- 聊聊架構架構
- 架構演化架構
- 架構之路架構
- Istio架構架構
- openGauss 架構架構
- mvc架構MVC架構
- FreeSWITCH架構架構
- RocketMQ架構MQ架構
- ARM架構架構
- PostgreSQL 架構SQL架構
- Docker 架構Docker架構
- presto 架構REST架構
- MySql架構MySql架構