本系列文章使用的硬件環境爲:centOS 6.5 64bit / 4G RAM 30G HHD
使用的Hive版本爲:mysql
hive2.0.0 / Hadoop版本爲2.6.4 / JDK版本爲:1.8.0sql
UI:用戶提交查詢或其餘系統操做的接口,多是命令行工具,也多是基於Web的界面工具數據庫
Driver:接收查詢的組件,Driver實現了會話的概念,而且提供基於JDBC和ODBC接口的執行和獲取的API模型。apache
Compiler:解析用戶查詢的組件,對不一樣的查詢塊和查詢表達式進行語法檢查,並最終藉助於MetaStore提供的表和分區的元數據信息生成一個執行計劃。架構
Metastore:存儲數據倉庫中的衆多表和分區的結構信息,字段和字段類型信息,讀寫數據所需的序列化和反序列化的反序列化工具信息,以及對應的數據在HDFS存儲的位置信息等。工具
Execution Engine:執行Compiler生成的執行計劃。Compiler生成的執行計劃是一個由不一樣stage組成的有向無環圖,Execution Engine管理不一樣stage之間的依賴關係,而後在合適的系統組件上執行這些stageoop
step1:用戶經過UI組件提交查詢語句或其餘指令,UI組件調用Driver組件的命令執行接口sqlserver
step2:Driver爲任務生成一個會話,而且將這個任務提交給Compiler組件。spa
step3:Compiler從Metastore中獲取用戶對查詢樹中的表達式進行數據類型檢查和基於分區的查詢預測所需的元數據信息。並生成執行計劃。Compiler生成的執行計劃是一個由不一樣的stage組成的有向無環圖,每一個stage有多是一個MapReduce任務,或者元數據信息操做,或者HDFS操做。若是是MapReduce類型的stage,那麼這個Stage會包含一個Map操做樹,和Reduce操做樹。最後Compiler會向Driver提交生成的執行計劃。命令行
step4:Driver生成執行計劃以後,向Execution Engine提交執行計劃
step5:Execution Engine收到執行計劃以後,會根據stage之間的依賴關係,而後向合適的外部組件提交這些stage(不一樣部署方式會有所不一樣)。外部組件(好比Hadoop)會將執行結構保存成臨時文件。若是任務執行會致使元素局信息的變更,Execution Engine會通知MetaStore進行元數據修改。
step6:Driver經過Execution Engine獲取執行結果,並將執行結果返回給終端用戶
hive的數據組織結構爲:
database:和通常關係型數據庫(例如mysql,sqlserver)中的database的概念是相似的,其做用主要是將用戶建的表進行隔離。實際存儲的時候就是一個數據庫的全部表存儲在一個文件夾中。
tables:表是實際存放數據的地方,和DBMS中相似,HIve中的表實際上也是二維表,分爲行和列,不一樣之處在於hive中除了一些原生類型以外,還支持List和Map類型,固然用戶也能夠自定義類型
partitions:爲了便於用戶組織數據,Hive中提供了一個分區的概念,和Oracle中的分區相似,能夠按照某個字段的不一樣取值,將數據組織在不一樣的分區中。如今Hive支持多級分區,即對分區以後的數據再進行分區,好比公司訂單數據,能夠先按照日期進行分區,天天一個分區,而後在天天的分區按照銷售區域進行分區。實際儲存時每一個分區實際上就是表目錄下的一個子目錄,多級分區就是子子目錄,依次類推。不是全部的表都必須分區
buckets:Hive中分區的數據能夠按照某個字段拆分紅多個文件,進行存儲。bucket可以容許系統有效的進行基於字段值得抽樣。並不是全部的表都會使用bucket
row:就是一條數據記錄,在默存儲方案下,Hive會指定一個航分割符號,對數據進行分割,默認爲換行符。行分割符能夠在建表的時候指定。
col:一行數據中可能會包含多個列(字段)。字段與字段之間使用列分割符進行分割。默認的列分隔符爲\001