大數據系列之數據倉庫Hive原理


Hive系列博文,持續更新~~~

大數據系列之數據倉庫Hive原理

大數據系列之數據倉庫Hive安裝

大數據系列之數據倉庫Hive中分區Partition如何使用

大數據系列之數據倉庫Hive命令使用及JDBC連接

 

Hive的工作原理簡單來說就是一個查詢引擎

先來一張Hive的架構圖:

Hive的工作原理如下:

接收到一個sql,后面做的事情包括:
1.詞法分析/語法分析
使用antlr將SQL語句解析成抽象語法樹-AST
2.語義分析
從Megastore獲取模式信息,驗證SQL語句中隊表名,列名,以及數據類型的檢查和隱式轉換,以及Hive提供的函數和用戶自定義的函數(UDF/UAF)
3.邏輯計划生產
生成邏輯計划-算子樹
4.邏輯計划優化
對算子樹進行優化,包括列剪枝,分區剪枝,謂詞下推等
5.物理計划生成
將邏輯計划生產包含由MapReduce任務組成的DAG的物理計划
6.物理計划執行
將DAG發送到Hadoop集群進行執行
7.將查詢結果返回

流程如下圖:

 

Query Compiler

新版本的Hive也支持使用Tez或Spark作為執行引擎。


物理計划可以通過hive的Explain命令輸出

例如:

0: jdbc:hive2://master:10000/dbmfz> explain select count(*) from record_dimension;
+------------------------------------------------------------------------------------------------------+--+
|                                               Explain                                                |
+------------------------------------------------------------------------------------------------------+--+
| STAGE DEPENDENCIES:                                                                                  |
|   Stage-1 is a root stage                                                                            |
|   Stage-0 depends on stages: Stage-1                                                                 |
|                                                                                                      |
| STAGE PLANS:                                                                                         |
|   Stage: Stage-1                                                                                     |
|     Map Reduce                                                                                       |
|       Map Operator Tree:                                                                             |
|           TableScan                                                                                  |
|             alias: record_dimension                                                                  |
|             Statistics: Num rows: 1 Data size: 543 Basic stats: COMPLETE Column stats: COMPLETE      |
|             Select Operator                                                                          |
|               Statistics: Num rows: 1 Data size: 543 Basic stats: COMPLETE Column stats: COMPLETE    |
|               Group By Operator                                                                      |
|                 aggregations: count()                                                                |
|                 mode: hash                                                                           |
|                 outputColumnNames: _col0                                                             |
|                 Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: COMPLETE    |
|                 Reduce Output Operator                                                               |
|                   sort order:                                                                        |
|                   Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: COMPLETE  |
|                   value expressions: _col0 (type: bigint)                                            |
|       Reduce Operator Tree:                                                                          |
|         Group By Operator                                                                            |
|           aggregations: count(VALUE._col0)                                                           |
|           mode: mergepartial                                                                         |
|           outputColumnNames: _col0                                                                   |
|           Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: COMPLETE          |
|           File Output Operator                                                                       |
|             compressed: false                                                                        |
|             Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: COMPLETE        |
|             table:                                                                                   |
|                 input format: org.apache.hadoop.mapred.SequenceFileInputFormat                       |
|                 output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat             |
|                 serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe                            |
|                                                                                                      |
|   Stage: Stage-0                                                                                     |
|     Fetch Operator                                                                                   |
|       limit: -1                                                                                      |
|       Processor Tree:                                                                                |
|         ListSink                                                                                     |
|                                                                                                      |
+------------------------------------------------------------------------------------------------------+--+
42 rows selected (0.844 seconds)

 


除了DML,Hive也提供DDL來創建表的schema。
Hive數據存儲支持HDFS的一些文件格式,比如CSV,Sequence File,Avro,RC File,ORC,Parquet。也支持訪問HBase。
Hive提供一個CLI工具,類似Oracle的sqlplus,可以交互式執行sql,提供JDBC驅動作為Java的API。

轉載請注明出處:

作者:mengfanzhu

原文鏈接:http://www.cnblogs.com/cnmenglang/p/6684615.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM