成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Hive系列文章(2):Hive介紹

keithxiaoy / 3057人閱讀

摘要:從中獲取用戶對查詢樹中的表達式進行數據類型檢查和基于分區(qū)的查詢預測所需的元數據信息。生成的執(zhí)行計劃是一個由不同的組成的有向無環(huán)圖,每個有可能是一個任務,或者元數據信息操作,或者操作。如果任務執(zhí)行會導致元素局信息的變動,會通知進行元數據修改。

本系列文章使用的硬件環(huán)境為:centOS 6.5 64bit / 4G RAM 30G HHD
使用的Hive版本為:

hive2.0.0 / Hadoop版本為2.6.4 / JDK版本為:1.8.0

1、 Hive架構

Hive的核心組件包括:

UI:用戶提交查詢或其他系統(tǒng)操作的接口,可能是命令行工具,也可能是基于Web的界面工具

Driver:接收查詢的組件,Driver實現了會話的概念,并且提供基于JDBC和ODBC接口的執(zhí)行和獲取的API模型。

Compiler:解析用戶查詢的組件,對不同的查詢塊和查詢表達式進行語法檢查,并最終借助于MetaStore提供的表和分區(qū)的元數據信息生成一個執(zhí)行計劃。

Metastore:存儲數據倉庫中的眾多表和分區(qū)的結構信息,字段和字段類型信息,讀寫數據所需的序列化和反序列化的反序列化工具信息,以及對應的數據在HDFS存儲的位置信息等。

Execution Engine:執(zhí)行Compiler生成的執(zhí)行計劃。Compiler生成的執(zhí)行計劃是一個由不同stage組成的有向無環(huán)圖,Execution Engine管理不同stage之間的依賴關系,然后在合適的系統(tǒng)組件上執(zhí)行這些stage

Hive任務的執(zhí)行流程

step1:用戶通過UI組件提交查詢語句或其他指令,UI組件調用Driver組件的命令執(zhí)行接口

step2:Driver為任務生成一個會話,并且將這個任務提交給Compiler組件。

step3:Compiler從Metastore中獲取用戶對查詢樹中的表達式進行數據類型檢查和基于分區(qū)的查詢預測所需的元數據信息。并生成執(zhí)行計劃。Compiler生成的執(zhí)行計劃是一個由不同的stage組成的有向無環(huán)圖,每個stage有可能是一個MapReduce任務,或者元數據信息操作,或者HDFS操作。如果是MapReduce類型的stage,那么這個Stage會包含一個Map操作樹,和Reduce操作樹。最后Compiler會向Driver提交生成的執(zhí)行計劃。

step4:Driver生成執(zhí)行計劃之后,向Execution Engine提交執(zhí)行計劃

step5:Execution Engine收到執(zhí)行計劃之后,會根據stage之間的依賴關系,然后向合適的外部組件提交這些stage(不同部署方式會有所不同)。外部組件(比如Hadoop)會將執(zhí)行結構保存成臨時文件。如果任務執(zhí)行會導致元素局信息的變動,Execution Engine會通知MetaStore進行元數據修改。

step6:Driver通過Execution Engine獲取執(zhí)行結果,并將執(zhí)行結果返回給終端用戶

2、 Hive的數據模型

hive的數據組織結構為:

database:和一般關系型數據庫(例如mysql,sqlserver)中的database的概念是類似的,其作用主要是將用戶建的表進行隔離。實際存儲的時候就是一個數據庫的所有表存儲在一個文件夾中。

tables:表是實際存放數據的地方,和DBMS中類似,HIve中的表實際上也是二維表,分為行和列,不同之處在于hive中除了一些原生類型之外,還支持List和Map類型,當然用戶也可以自定義類型

partitions:為了便于用戶組織數據,Hive中提供了一個分區(qū)的概念,和Oracle中的分區(qū)類似,可以按照某個字段的不同取值,將數據組織在不同的分區(qū)中?,F在Hive支持多級分區(qū),即對分區(qū)之后的數據再進行分區(qū),比如公司訂單數據,可以先按照日期進行分區(qū),每天一個分區(qū),然后在每天的分區(qū)按照銷售區(qū)域進行分區(qū)。實際儲存時每個分區(qū)實際上就是表目錄下的一個子目錄,多級分區(qū)就是子子目錄,依次類推。不是所有的表都必須分區(qū)

buckets:Hive中分區(qū)的數據可以按照某個字段拆分成多個文件,進行存儲。bucket能夠允許系統(tǒng)有效的進行基于字段值得抽樣。并非所有的表都會使用bucket

row:就是一條數據記錄,在默存儲方案下,Hive會指定一個航分割符號,對數據進行分割,默認為換行符。行分割符可以在建表的時候指定。

col:一行數據中可能會包含多個列(字段)。字段與字段之間使用列分割符進行分割。默認的列分隔符為