Hive的使用場景是什麼?web
基於Hadoop作一些數據清洗啊(ETL)、報表啊、數據分析sql
能夠將結構化的數據文件映射爲一張數據庫表,並提供類SQL查詢功能。shell
Hive是SQL解析引擎,它將SQL語句轉譯成M/R Job而後在Hadoop執行。數據庫
Hive底層的執行引擎有:MapReduce、Tez、Spark編程
Hive是C/S模式架構
客戶端:併發
Client端有JDBC/ODBC和Thrift Client,可遠程訪問Hiveapp
能夠經過shell腳本的方式訪問,或者經過Thrift協議,按照平時編寫JDBC的方式完成對Hive的數據操做框架
Server:CLI、Thrift Server、HWI(Hive web Interface)、Driver、Metastore函數
Driver:
輸入了sql字符串,對sql字符串進行解析,轉化程抽象語法樹,再轉化成邏輯計劃,而後使用優化工具對邏輯計劃進行優化,最終生成物理計劃(序列化反序列化,UDF函數),交給Execution執行引擎,提交到MapReduce上執行(輸入和輸出能夠是本地的也能夠是HDFS/Hbase)見下圖的hive架構
Metastore:
Metastore進行元數據管理:Derby(內置 )、Mysql;Derby:Derby只接受一個Hive的會話訪問;Mysql:Hive跑在Hadoop之上的,Mysql進行主備(定時同步操做)
由上圖可知,hadoop 和 mapreduce 是 hive 架構的根基。
MetaStore:存儲和管理Hive的元數據,使用關係數據庫來保存元數據信息。
解析器和編譯器:將SQL語句生成語法樹,而後再生成DAG形式的Job鏈,成爲邏輯計劃
優化器:只提供了基於規則的優化
執行器:執行器將DAG轉換爲MR任務。執行器會順序執行其中全部的Job,若是Job不存在依賴關係,採用併發的方式進行執行。
sql寫出來之後只是一些字符串的拼接,因此要通過一系列的解析處理,才能最終變成集羣上的執行的做業
1.Parser:將sql解析爲AST(抽象語法樹),會進行語法校驗,AST本質仍是字符串
2.Analyzer:語法解析,生成QB(query block)
3.Logicl Plan:邏輯執行計劃解析,生成一堆Opertator Tree
4.Logical optimizer:進行邏輯執行計劃優化,生成一堆優化後的Opertator Tree
5.Phsical plan:物理執行計劃解析,生成tasktree
6.Phsical Optimizer:進行物理執行計劃優化,生成優化後的tasktree,該任務便是集羣上的執行的做業
查看執行計劃。
explain select id,name from emp where deptid = 1001 order by id