之前更完了《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的資料型別做一個簡單的介紹。
如果覺得寫得還不錯,麻煩點個小小的贊支援一下作者,可以持續關注【大資料的奇妙冒險】,解鎖更多知識。