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