成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

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

keithxiaoy / 2915人閱讀

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

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

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

1、 Hive架構(gòu)

Hive的核心組件包括:

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

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

Compiler:解析用戶(hù)查詢(xún)的組件,對(duì)不同的查詢(xún)塊和查詢(xún)表達(dá)式進(jìn)行語(yǔ)法檢查,并最終借助于MetaStore提供的表和分區(qū)的元數(shù)據(jù)信息生成一個(gè)執(zhí)行計(jì)劃。

Metastore:存儲(chǔ)數(shù)據(jù)倉(cāng)庫(kù)中的眾多表和分區(qū)的結(jié)構(gòu)信息,字段和字段類(lèi)型信息,讀寫(xiě)數(shù)據(jù)所需的序列化和反序列化的反序列化工具信息,以及對(duì)應(yīng)的數(shù)據(jù)在HDFS存儲(chǔ)的位置信息等。

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

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

step1:用戶(hù)通過(guò)UI組件提交查詢(xún)語(yǔ)句或其他指令,UI組件調(diào)用Driver組件的命令執(zhí)行接口

step2:Driver為任務(wù)生成一個(gè)會(huì)話(huà),并且將這個(gè)任務(wù)提交給Compiler組件。

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

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

step5:Execution Engine收到執(zhí)行計(jì)劃之后,會(huì)根據(jù)stage之間的依賴(lài)關(guān)系,然后向合適的外部組件提交這些stage(不同部署方式會(huì)有所不同)。外部組件(比如Hadoop)會(huì)將執(zhí)行結(jié)構(gòu)保存成臨時(shí)文件。如果任務(wù)執(zhí)行會(huì)導(dǎo)致元素局信息的變動(dòng),Execution Engine會(huì)通知MetaStore進(jìn)行元數(shù)據(jù)修改。

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

2、 Hive的數(shù)據(jù)模型

hive的數(shù)據(jù)組織結(jié)構(gòu)為:

database:和一般關(guān)系型數(shù)據(jù)庫(kù)(例如mysql,sqlserver)中的database的概念是類(lèi)似的,其作用主要是將用戶(hù)建的表進(jìn)行隔離。實(shí)際存儲(chǔ)的時(shí)候就是一個(gè)數(shù)據(jù)庫(kù)的所有表存儲(chǔ)在一個(gè)文件夾中。

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

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

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

row:就是一條數(shù)據(jù)記錄,在默存儲(chǔ)方案下,Hive會(huì)指定一個(gè)航分割符號(hào),對(duì)數(shù)據(jù)進(jìn)行分割,默認(rèn)為換行符。行分割符可以在建表的時(shí)候指定。

col:一行數(shù)據(jù)中可能會(huì)包含多個(gè)列(字段)。字段與字段之間使用列分割符進(jìn)行分割。默認(rèn)的列分隔符為