亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

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

keithxiaoy / 3058人閱讀

摘要:從中獲取用戶對(duì)查詢樹中的表達(dá)式進(jìn)行數(shù)據(jù)類型檢查和基于分區(qū)的查詢預(yù)測所需的元數(shù)據(jù)信息。生成的執(zhí)行計(jì)劃是一個(gè)由不同的組成的有向無環(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:用戶提交查詢或其他系統(tǒng)操作的接口,可能是命令行工具,也可能是基于Web的界面工具

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

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

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

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

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

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

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

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

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

step5:Execution Engine收到執(zhí)行計(jì)劃之后,會(huì)根據(jù)stage之間的依賴關(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通過Execution Engine獲取執(zhí)行結(jié)果,并將執(zhí)行結(jié)果返回給終端用戶

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

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

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

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

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