hive從入門到放棄(一)——初識hive

Max_Lyu發表於2022-03-12

之前更完了《Kafka從入門到放棄》系列文章,本人決定開新坑——hive從入門到放棄,今天先認識一下hive。
沒看過 Kafka 系列的朋友可以點此傳送閱讀:
《Kafka從入門到放棄》系列

hive介紹

hive是一個開源的用於大資料分析和統計的資料庫工具,它的儲存基於HDFS,計算基於MapReduce或Spark,可以將結構化資料對映成表,並提供類SQL查詢功能。

特點

  • 提供類SQL查詢,容易上手,開發方便
  • 封裝了很多方法,儘量避免了開發MapReduce程式,減少成本
  • 支援自定義函式,可以根據需求實現函式
  • 適用於處理大規模資料,小資料的處理沒有優勢
  • 執行延遲較高,適合用於資料分析,不適合對時效性要求較高的場景

hive的架構

  • MetaStore:後設資料,資料的資料,比如某個表的後設資料,包括表名、表所屬的資料庫、表的型別、表的資料目錄等;
  • CLI(命令列介面)、JDBC:使用者介面,用以訪問hive;
  • Sql Parser 解析器:將SQL轉換成抽象語法樹,一般用第三方工具庫完成;對抽象語法樹進行語法分析,比如表是否存在、欄位是否存在、SQL語義是否有誤;
  • Physical Plan 編譯器:將抽象語法樹編譯生成邏輯執行計劃;
  • Query Optimizer 優化器:對邏輯執行計劃進行優化;
  • Execution 執行器:把邏輯執行計劃轉換成可以執行的物理計劃。對Hive而言,就是 MR/Spark;
  • HDFS:hive資料檔案存放的地方。

不熟悉 HDFS 的朋友可以點選傳送:《大資料 | 分散式檔案系統 HDFS》

hive執行機制

當建立表的時候,需要指定HDFS檔案路徑,表和其檔案路徑會儲存到MetaStore,從而建立表和資料的對映關係。當資料載入如表時,根據對映獲取到對應的HDFS路徑,將資料匯入。

使用者輸入SQL後,hive會將其翻譯成MapReduce或者Spark任務,提交到Yarn上面執行,執行成功將返回結果。

*hive預設將後設資料儲存在derby資料庫中,但其僅支援單執行緒操作,若有一個使用者在操作,其他使用者則無法使用,造成效率不高;
而且當在切換目錄後,重新進入Hive會找不到原來已經建立的資料庫和表,
因此一般用MySQL儲存後設資料。

hive與資料庫

可能有些朋友會認為,hive是資料庫,因為它提供了類SQL查詢功能。但其實除了這一點和資料庫相似以外,其它的根本就沒有多少共性。

  • 資料庫支援事務,可讀可寫;而hive不支援事務,一般用於讀多寫少的情況,不建議改動資料,因為資料儲存在HDFS中,而HDFS的檔案不支援修改;
  • hive延遲比較大,因其底層是MapReduce,執行效率較慢。但當資料規模較大的情況下,hive的平行計算優勢就體現出來了,資料庫的效率就不如hive了;
  • hive不支援索引,查詢的時候是全表掃描,這也是其延遲大的原因之一;

*hive在0.14以後的版本支援事務,前提是檔案格式為 orc 格式,同時必須分桶,還必須顯式宣告 transactional=true

hive的資料型別

數字類

型別 長度
TINYINT 1-byte
SMALLINT 2-byte
INT/INTEGER 4-byte
BIGINT 8-byte
FLOAT 4-byte
DOUBLE 8-byte
DECIMAL -

日期類

型別 版本
TIMESTAMP 0.8.0以後
DATE 0.12.0以後
INTERVAL 1.2.0以後

字元類

型別 版本
STRING -
VARCHAR 0.12.0以後
CHAR 0.13.0以後

Misc類

型別 版本
BOOLEAN -
BINARY 0.8.0以後

複合類

型別 版本 備註
ARRAYS 0.14.以後 ARRAY<data_type>
MAPS 0.14.以後 MAP<primitive_type, data_type>
STRUCTS - STRUCT<col_name : data_type [COMMENT col_comment], ...>
UNION 0.7.0以後 UNIONTYPE<data_type, data_type, ...>

小結

本文從hive的特點、架構及執行機制開始,並將hive與資料庫做對比,簡單介紹了hive,同時對hive的資料型別做一個簡單的介紹。

如果覺得寫得還不錯,麻煩點個小小的贊支援一下作者,可以持續關注【大資料的奇妙冒險】,解鎖更多知識。

相關文章