什么是hive:Hive是基于hadoop的一個(gè)數(shù)據(jù)倉(cāng)庫(kù)工具,實(shí)質(zhì)就是一款基于hdfs的MapReduce計(jì)算框架,對(duì)存儲(chǔ)在HDFS中的數(shù)據(jù)進(jìn)行分析和管理。
hive的工作方式:把存放在hive中的數(shù)據(jù)都抽象成一張二維表格,提供了一個(gè)類(lèi)似于sql語(yǔ)句的操作方式,這些sql語(yǔ)句最終被hive的底層翻譯成為MapReduce程序,最終在hadoop集群上運(yùn)行,結(jié)果也會(huì)輸出在hdfs之中。(必須是結(jié)構(gòu)化的數(shù)據(jù))。在存儲(chǔ)的時(shí)候hive對(duì)數(shù)據(jù)不做校驗(yàn),在讀取的時(shí)候校驗(yàn)。
hive的的優(yōu)點(diǎn):極大的簡(jiǎn)化了分布式的計(jì)算程序的編程。使不會(huì)分布式編程的,其他工作人員都可以進(jìn)行海量數(shù)據(jù)的統(tǒng)計(jì)分析。
hive的的缺點(diǎn):不支持行級(jí)別的增刪改操作、hive的查詢(xún)延遲很?chē)?yán)重、hive中不支持事務(wù),主要用于做OLAP(聯(lián)機(jī)分析處理)。
hive的的適用場(chǎng)景:hive數(shù)據(jù)倉(cāng)庫(kù)中的數(shù)據(jù),主要是存儲(chǔ),在進(jìn)行ETL(數(shù)據(jù)清洗、抽取、轉(zhuǎn)換、裝載)操作之后的具有結(jié)構(gòu)化的數(shù)據(jù)。但是數(shù)據(jù)的存儲(chǔ)的格式?jīng)]有特殊要求,可以使普通文件,也可以是溢寫(xiě)壓縮文件等等。
hive的的與關(guān)系型數(shù)據(jù)庫(kù)的對(duì)比:
hive的架構(gòu)中有四個(gè)部分組成:
用戶(hù)接口:
- CLI(command line interface),shell終端命令行,采用交互式使用hive命令行與hive進(jìn)行交互,最常用(學(xué)習(xí)、生成、調(diào)試)
- Jdbc/odbc:是hive的基于jdbc操作提供的客戶(hù)端,用戶(hù)(開(kāi)發(fā)、運(yùn)維)通過(guò)這個(gè)鏈接hive server服務(wù)
- Web UI:通過(guò)瀏覽器訪問(wèn)hive(基本不用)
Thrift Server:Thrift是facebook開(kāi)發(fā)的一個(gè)軟件框架,可以用來(lái)進(jìn)行可擴(kuò)展且跨語(yǔ)言的服務(wù)的開(kāi)發(fā),hive集成了該服務(wù),能讓不同的編程語(yǔ)言調(diào)用hive的接口。
底層四大組件:底層的四大組件完成hql查詢(xún)語(yǔ)句從詞法分析,語(yǔ)法分析,編譯,優(yōu)化,以及生成邏輯執(zhí)行計(jì)劃的生成。生成的邏輯執(zhí)行計(jì)劃存儲(chǔ)在hdfs中,并隨后由MapReduce調(diào)用執(zhí)行。
- 解釋器:解釋器的作用是將hiveSQL語(yǔ)句轉(zhuǎn)換成抽象語(yǔ)法數(shù)
- 編譯器:編譯器是將語(yǔ)法樹(shù)編譯成為邏輯執(zhí)行計(jì)劃
- 優(yōu)化器:優(yōu)化器是對(duì)邏輯執(zhí)行計(jì)劃進(jìn)行優(yōu)化
- 執(zhí)行器:執(zhí)行時(shí)調(diào)用底層的運(yùn)行框架執(zhí)行邏輯執(zhí)行計(jì)劃
執(zhí)行流程就是:hiveQL,通過(guò)命令或者客戶(hù)端提交,經(jīng)過(guò)compiler編譯器,運(yùn)用metastore中的元數(shù)據(jù)進(jìn)行類(lèi)型檢測(cè)和語(yǔ)法分析,生成一個(gè)邏輯方案,然后通過(guò)的優(yōu)化處理,產(chǎn)生一個(gè)maptask程序。
元數(shù)據(jù)庫(kù):就是存儲(chǔ)在hive中的數(shù)據(jù)的描述信息,通常包括:表的名字、表的列和分區(qū)以及其屬性、表的屬性(內(nèi)部表和外部表),表的數(shù)據(jù)所在目錄。而hive有兩種元數(shù)據(jù)的存儲(chǔ)方案:
- Metastore默認(rèn)存儲(chǔ)在自帶的derby數(shù)據(jù)庫(kù)中。缺點(diǎn)是:不適合多用戶(hù)操作,并且數(shù)據(jù)存儲(chǔ)目錄不固定。數(shù)據(jù)庫(kù)跟著hive的進(jìn)入目錄走,極度不方便管理。
- Hive和mysql之間通過(guò)Metastore服務(wù)交互(本地或者遠(yuǎn)程)
hive的存儲(chǔ)特點(diǎn):
- hive中所有的數(shù)據(jù)都存儲(chǔ)在hdfs中,沒(méi)有專(zhuān)門(mén)的數(shù)據(jù)存儲(chǔ)格式,因?yàn)閔ive是讀模式,可支持TezxtFile、SequenceFile(序列化)RCFile(行列結(jié)合)或者自定義格式等
- 只需要在創(chuàng)建表的時(shí)候,告訴hive數(shù)據(jù)中的列分隔符和行分隔符,hive就可以解析數(shù)據(jù),默認(rèn)的列分隔符是:(Ctrl + a 不可見(jiàn)字符: \x01),行分隔符是:(\n 換行符)
hive的存儲(chǔ)結(jié)構(gòu): hive的存儲(chǔ)結(jié)構(gòu):數(shù)據(jù)庫(kù)、表、視圖、分區(qū)和表數(shù)據(jù)等。數(shù)據(jù)庫(kù)、表、視圖、分區(qū)等等都對(duì)應(yīng)hdfs上的一個(gè)目錄,表數(shù)據(jù)對(duì)應(yīng)hdfs對(duì)應(yīng)目錄下的文件。
例:
Hdfs://Hadoop01/user/hive/warehouse/myhive.db/student/student.txt
Hdfs://Hadoop01/user/hive/warehouse:表示hive的數(shù)據(jù)倉(cāng)庫(kù)
Hdfs://Hadoop01/user/hive/warehouse/myhive.db: hive的一個(gè)數(shù)據(jù)庫(kù)
Hdfs://Hadoop01/user/hive/warehouse/myhive.db/student hive中的一個(gè)表
Hdfs://Hadoop01/user/hive/warehouse/myhive.db/student/student.txt 數(shù)據(jù)文件
注意:當(dāng)我們?cè)趧?chuàng)建表的時(shí)候,首先會(huì)在hdfs上的相應(yīng)的目錄下生成一個(gè)文件,同時(shí)在hive的元數(shù)據(jù)庫(kù)中會(huì)為這個(gè)新建的表生成一條記錄。
hive具體的存儲(chǔ)結(jié)構(gòu):
- 數(shù)據(jù)倉(cāng)庫(kù):在 HDFS 中表現(xiàn)為${hive.metastore.warehouse.dir}目錄下一個(gè)文件夾
-表:hive的表分為內(nèi)部表、外部表、分區(qū)表、分桶表,表在hdfs中的表現(xiàn)形式也是目錄,但是不同的表之間的表現(xiàn)形式不同
- 視圖:物化,hive是不會(huì)進(jìn)行物化,相當(dāng)于給一個(gè)sql語(yǔ)句建立了一個(gè)快捷方式,保存的是一個(gè)視圖中的sql語(yǔ)句。只讀,基于基表創(chuàng)建。
- 數(shù)據(jù)文件 :表中的真實(shí)數(shù)據(jù)
內(nèi)部表:又叫管理表,表的創(chuàng)建,和刪除都由hive自己決定。
外部表:表結(jié)構(gòu)上同內(nèi)部表,但是存儲(chǔ)的數(shù)據(jù)時(shí)自己定義的,外部表在刪除的時(shí)候只刪除元數(shù)據(jù),原始數(shù)據(jù)時(shí)不能刪除的。
內(nèi)部表和外部表的區(qū)別主要體現(xiàn)在兩個(gè)方面:
- 刪除:刪除內(nèi)部表,刪除元數(shù)據(jù)和數(shù)據(jù);刪除外部表,刪除元數(shù)據(jù),保留數(shù)據(jù)。
- 使用:如果數(shù)據(jù)的所有處理都在 Hive 中進(jìn)行,那么傾向于 選擇內(nèi)部表,但是如果 Hive 和其他工具要針對(duì)相同的數(shù)據(jù)集進(jìn)行處理,外部表更合適。使用外部表訪問(wèn)存儲(chǔ)在hdfs上的數(shù)據(jù),然后通過(guò)hive轉(zhuǎn)化數(shù)據(jù)并存儲(chǔ)到內(nèi)部表中。
分區(qū)表: 原來(lái)的一個(gè)大表存儲(chǔ)的時(shí)候分成不同的數(shù)據(jù)目錄進(jìn)行存儲(chǔ)。
如果說(shuō)是單分區(qū)表,那么在表的目錄下就只有一級(jí)子目錄,如果說(shuō)是多分區(qū)表,那么在表的目錄下有多少分區(qū)就有多少級(jí)子目錄。不管是單分區(qū)表,還是多分區(qū)表,在表的目錄下,和非最終分區(qū)目錄下是不能之間存儲(chǔ)數(shù)據(jù)文件的。
例:
單分區(qū)表:
Hdfs://Hadoop01/user/hive/warehouse/myhive.db/student/p0
多分區(qū)表:
Hdfs://Hadoop01/user/hive/warehouse/myhive.db/student/p0
Hdfs://Hadoop01/user/hive/warehouse/myhive.db/student/p1
Hdfs://Hadoop01/user/hive/warehouse/myhive.db/student/p2
Hdfs://Hadoop01/user/hive/warehouse/myhive.db/student/p1/p11
分桶表: 原理和hashpartitioner 一樣,將hive中的一張表的數(shù)據(jù)進(jìn)行歸納分類(lèi)的時(shí)候,歸納分類(lèi)規(guī)則就是hashpartitioner。(需要指定分桶字段,指定分成多少桶)
bucket:在hdfs中表現(xiàn)為同一個(gè)表目錄或者分區(qū)目錄下根據(jù)某個(gè)字段的值進(jìn)行Hash散列之后的多個(gè)文件,分桶的表現(xiàn)形式就是一個(gè)單獨(dú)的文件.
例:
Hdfs://Hadoop01/user/hive/warehouse/myhive.db/student/age>15
Hdfs://Hadoop01/user/hive/warehouse/myhive.db/student/age>20
Hdfs://Hadoop01/user/hive/warehouse/myhive.db/student/age>30
分區(qū)表和分桶的區(qū)別除了存儲(chǔ)的格式不同外,最主要的是作用:
- 分區(qū)表:細(xì)化數(shù)據(jù)管理,縮小mapreduce程序 需要掃描的數(shù)據(jù)量。
- 分桶表:提高join查詢(xún)的效率,在一份數(shù)據(jù)會(huì)被經(jīng)常用來(lái)做連接查詢(xún)的時(shí)候建立分桶,分桶字段就是連接字段;提高采樣的效率。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。
分享標(biāo)題:hive的基礎(chǔ)理論-創(chuàng)新互聯(lián)
當(dāng)前鏈接:http://aaarwkj.com/article18/dpppdp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、軟件開(kāi)發(fā)、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、網(wǎng)站制作、ChatGPT、小程序開(kāi)發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容