一、Hive體系架構sql
(1)Command-line shell:client在命令行shell上寫sql,寫完後提交給Hive引擎上。shell
(2)Thrift/JDBC:看作server/jdbc。Thrift是一種協議,把Hive起成一個服務server,經過JDBC的方式提交sql。額外能夠看看WebUI(HUE/Zeppelin)經過圖形化界面進行jdbc鏈接,sql在圖形化界面上運行,全部進行可視化的展現。架構
(3)metastore:即元數據信息,存儲在MySQL上ide
database:name、location、owner...函數
table:name、location、owner、column name/type...優化
(4)Driver:命令行
sql語句是普通的字符串,如何讓字符串讓Hive識別:翻譯
Driver編譯sql爲語法數server
首先使用SQL Parser進行解析、編譯爲語法數blog
基於這個語法數,使用Query Optimizer進行優化,取出最優的執行計劃
最優的執行計劃生成物理執行計劃
在這個物理執行計劃過程當中,存在序列化及反序列化SerDes、用戶本身定義的函數UDFs
物理執行計劃會生成一個Execution
在Execution下,生成一個MapReduce
Driver的這一過程,即將客戶端來的sql翻譯成MapReduce
(5)最後將做業提交到HDFS,進行執行。