Hive架構
hive架構圖
hive組件
用戶接口
CLI、JDBC/ODBC和WebGUI。其中,CLI爲shell命令行;JDBC/ODBC是Hive的JAVA實現,與傳統數據庫JDBC類似;WebGUI是通過瀏覽器訪問Hive。元數據存儲
Hive 將元數據存儲在數據庫中。Hive 中的元數據包括表的名字,表的列和分區及其屬性,表的屬性(是否爲外部表等),表的數據所在目錄等。解釋器、編譯器、優化器、執行器
解釋器、編譯器、優化器完成 HQL 查詢語句從詞法分析、語法分析、編譯、優化以及查詢計劃的生成。生成的查詢計劃存儲在 HDFS 中,並在隨後有 MapReduce 調用執行。Hive的數據存儲在HDFS中,大部分的查詢、計算由MapReduce完成(包含的查詢,比如select from tbl不會生成MapRedcue任務)。
Hive與Hadoop的關係
Hive利用HDFS存儲數據,利用MapReduce查詢數據
Hive與Hadoop關係圖
Hive的數據存儲
1、Hive中所有的數據都存儲在 HDFS 中,沒有專門的數據存儲格式(可支持Text,SequenceFile,ParquetFile,RCFILE等)2、只需要在創建表的時候告訴 Hive 數據中的列分隔符和行分隔符,Hive 就可以解析數據。
3、Hive 中包含以下數據模型:DB、Table,External Table,Partition,Bucket。
- db:在hdfs中表現爲${hive.metastore.warehouse.dir}目錄下一個文件夾
- table:在hdfs中表現所屬db目錄下一個文件夾
- external table:與table類似,不過其數據存放位置可以在任意指定路徑
- partition:在hdfs中表現爲table目錄下的子目錄
- bucket:在hdfs中表現爲同一個表目錄下根據hash散列之後的多個文件
Hive操作符Operator
• 編譯器將一個Hive QL轉換操作符
• 操作符是Hive的最小的處理單元
• 每個操作符代表HDFS的一個操作或者一道MapReduce作業Operator
• Operator都是hive定義的一個處理過程• Operator都定義有:
• protected List <Operator<? extends Serializable >> childOperators;
• protected List <Operator<? extends Serializable >> parentOperators;
• protected boolean done; // 初始化值爲false
• 所有的操作構成了 Operator圖,hive正是基於這些圖關係來處理諸如limit, group by, join等操作
HiveSql執行流程
1、 提交sql ,交給驅動
2、驅動編譯,解析相關的字段表信息
3、去metastore查詢相關的信息,返回字段表信息
4、編譯返回信息 發給驅動
5、驅動發送一個執行計劃,交給執行引擎
6.0、DDLs 對數據庫表的操作的 直接和metastore交互
create table tab(name string);6.1、把job交給job tracker 讓task tracker執行 返回執行信息
6.2、完成job返回數據信息,找namenode查數據
6.3、namenode交互
select count(1) from tab;6.1、dfs ops 直接和直接去數據
select * from tab;7、返回結果信息集