新聞中心
在大數(shù)據(jù)處理中,Hive是一款開(kāi)源的數(shù)據(jù)倉(cāng)庫(kù)工具,它能夠?qū)⒑A繑?shù)據(jù)進(jìn)行分析和存儲(chǔ)。Hive基于Hadoop的分布式文件系統(tǒng)HDFS,使用類(lèi)SQL語(yǔ)言,支持以MapReduce作為底層計(jì)算引擎。

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專(zhuān)注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、微信小程序開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了嵐皋免費(fèi)建站歡迎大家使用!
然而,對(duì)于需要快速查詢(xún)的海量數(shù)據(jù),Hive常常遇到擴(kuò)展性和效率的問(wèn)題。Hive基于Hadoop的架構(gòu)模式需要將數(shù)據(jù)進(jìn)行分區(qū)化處理才能進(jìn)行查詢(xún),這導(dǎo)致了Hive在查詢(xún)大數(shù)據(jù)時(shí)的過(guò)多的I/O操作,進(jìn)而影響了Hive的查詢(xún)效率。
為了解決這個(gè)問(wèn)題,研究人員提出了一種新的方法,即Hive擴(kuò)展數(shù)據(jù)庫(kù)。這種方法能夠讓Hive不需要進(jìn)行分區(qū)化處理就能直接查詢(xún)大數(shù)據(jù)并提高查詢(xún)效率。
一、Hive擴(kuò)展數(shù)據(jù)庫(kù)的原理
Hive擴(kuò)展數(shù)據(jù)庫(kù)的原理是通過(guò)一種新型的文件存儲(chǔ)格式ORC(Optimized Row Columnar)來(lái)存儲(chǔ)數(shù)據(jù)。ORC文件格式是專(zhuān)門(mén)針對(duì)Hadoop生態(tài)系統(tǒng)開(kāi)發(fā)的一種列式存儲(chǔ)格式,它可以大幅度減少I(mǎi)/O操作次數(shù),提高查詢(xún)效率。與傳統(tǒng)的存儲(chǔ)格式相比,使用ORC格式存儲(chǔ)時(shí),Hive可以將單次查詢(xún)的I/O次數(shù)降低到1/10以下。
在使用ORC格式進(jìn)行數(shù)據(jù)存儲(chǔ)之后,Hive可以不進(jìn)行數(shù)據(jù)分區(qū)化處理,直接進(jìn)行查詢(xún),并且查詢(xún)效率很高。這種方法可以讓Hive處理海量數(shù)據(jù)時(shí)避免進(jìn)行大量的I/O操作,從而大幅度提升查詢(xún)效率。
二、Hive擴(kuò)展數(shù)據(jù)庫(kù)的優(yōu)勢(shì)
1、提高查詢(xún)速度
使用Hive擴(kuò)展數(shù)據(jù)庫(kù)可以大幅度提高查詢(xún)效率。在Hive進(jìn)行查詢(xún)時(shí),I/O操作是一個(gè)非常重要的環(huán)節(jié),如果數(shù)據(jù)分區(qū)非常多,需要讀取的數(shù)據(jù)也就隨之變多,這導(dǎo)致Hive進(jìn)行查詢(xún)的效率非常低下。而使用ORC格式存儲(chǔ)數(shù)據(jù)不需要進(jìn)行數(shù)據(jù)分區(qū)化處理,可以讓Hive直接進(jìn)行查詢(xún),從而大大提高查詢(xún)效率。
2、降低成本
使用Hive擴(kuò)展數(shù)據(jù)庫(kù)可以降低成本。傳統(tǒng)的存儲(chǔ)方式需要進(jìn)行數(shù)據(jù)分區(qū)化處理,這通常需要大量的人力和時(shí)間投入。而使用ORC格式存儲(chǔ)數(shù)據(jù)可以避免這些成本,同時(shí)還可以更好地滿足海量數(shù)據(jù)的存儲(chǔ)和查詢(xún)需求。
3、提高數(shù)據(jù)質(zhì)量
使用Hive擴(kuò)展數(shù)據(jù)庫(kù)可以提高數(shù)據(jù)質(zhì)量。由于不需要進(jìn)行數(shù)據(jù)分區(qū)化處理,因此數(shù)據(jù)間的關(guān)聯(lián)和分布可以更好地保留和忠實(shí)反映。這樣能夠避免分區(qū)化處理時(shí)可能出現(xiàn)的數(shù)據(jù)漏洞和誤差,從而提高數(shù)據(jù)質(zhì)量。
三、Hive擴(kuò)展數(shù)據(jù)庫(kù)的應(yīng)用場(chǎng)景
1、海量數(shù)據(jù)存儲(chǔ)和查詢(xún)場(chǎng)景
Hive擴(kuò)展數(shù)據(jù)庫(kù)適用于海量數(shù)據(jù)存儲(chǔ)和查詢(xún)場(chǎng)景,例如電商、金融、醫(yī)療、物流等行業(yè),對(duì)于需要進(jìn)行海量數(shù)據(jù)查詢(xún)和高效存儲(chǔ)的場(chǎng)景非常適用。
2、機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘場(chǎng)景
Hive擴(kuò)展數(shù)據(jù)庫(kù)同樣適用于機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘場(chǎng)景,特別是在需要處理大規(guī)模數(shù)據(jù)集以進(jìn)行機(jī)器學(xué)習(xí)訓(xùn)練時(shí),使用Hive擴(kuò)展數(shù)據(jù)庫(kù)可以極大地提高數(shù)據(jù)處理效率。
3、存儲(chǔ)系統(tǒng)升級(jí)場(chǎng)景
如果現(xiàn)有的存儲(chǔ)系統(tǒng)無(wú)法承受更高的數(shù)據(jù)量和復(fù)雜查詢(xún)時(shí),可以使用Hive擴(kuò)展數(shù)據(jù)庫(kù)來(lái)升級(jí)存儲(chǔ)和查詢(xún)能力。
四、結(jié)論
Hive擴(kuò)展數(shù)據(jù)庫(kù)是一種新型的數(shù)據(jù)存儲(chǔ)和查詢(xún)技術(shù),它使用ORC格式存儲(chǔ)數(shù)據(jù)來(lái)避免數(shù)據(jù)分區(qū)化處理,從而提高查詢(xún)效率。使用Hive擴(kuò)展數(shù)據(jù)庫(kù)可以大幅提高查詢(xún)速度,降低成本,并提高數(shù)據(jù)質(zhì)量。Hive擴(kuò)展數(shù)據(jù)庫(kù)適用于海量數(shù)據(jù)存儲(chǔ)和高效查詢(xún)、機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘等場(chǎng)景。如果現(xiàn)有存儲(chǔ)系統(tǒng)無(wú)法承受更高的數(shù)據(jù)量和查詢(xún)要求,可以考慮使用Hive擴(kuò)展數(shù)據(jù)庫(kù)進(jìn)行升級(jí)。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù)!
hive 分區(qū)表
hive 分區(qū)表:
分區(qū)字段的物理表現(xiàn):
hive分區(qū)表 ,其真實(shí)的表現(xiàn)其實(shí)就是在 存儲(chǔ)hive表的文件夾的下面,創(chuàng)建新的文件夾,
文件夾的名字是 分區(qū)字段=字段取值 這種格式的。
分區(qū)的優(yōu)點(diǎn):
當(dāng)分區(qū)表的數(shù)據(jù)很大的時(shí)候,可以指定查詢(xún)表格之逗胡寬中的部分?jǐn)?shù)據(jù)。
設(shè)置表格分區(qū)字段需要的注意點(diǎn):
1:分區(qū)字段的取值不要很多,因?yàn)檫@樣會(huì)造成表的文件夾的下面會(huì)出現(xiàn)很多的小的文件夾
2: 一般可以將sql之中 where 之中出現(xiàn)的字段作為 分區(qū)的字段。(可以當(dāng)作分區(qū)字段選取的一個(gè)參考)
查看表格是否是分區(qū)表:
desc formatted table_name
分區(qū)表的話 ,會(huì)有Partition Information
向分區(qū)表插入數(shù)據(jù):
情況分為:
1:向表格之中插入數(shù)據(jù),明確指定插入的分區(qū)的名字
2:向表格之中插入數(shù)據(jù),不明確指定插入的數(shù)據(jù)的名字,而是根據(jù)插入的數(shù)據(jù)的某個(gè)字段的取值來(lái)自動(dòng)決定數(shù)據(jù)
入到哪一個(gè)分區(qū)之中。被稱(chēng)為動(dòng)態(tài)分區(qū)。
如何開(kāi)啟hive 動(dòng)態(tài)分區(qū)的功能?
set hive.exec.dynamici.partition=true;
hive 動(dòng)態(tài)分區(qū):有兩種模式:
嚴(yán)格模式 和非嚴(yán)格模式
嚴(yán)格模式:
動(dòng)態(tài)分區(qū)的時(shí)候,必須有一個(gè)分區(qū)是靜態(tài)的。
非嚴(yán)格模式,對(duì)分區(qū)是否是靜態(tài)的不在意。
如何設(shè)置 動(dòng)態(tài)分區(qū)的模式?
set hive.exec.dynamic.partition.mode=nostrict
默認(rèn)的模式是strict 嚴(yán)格模式。
插入數(shù)據(jù)時(shí) 明確指定需要插入的分區(qū)的值:
sql demo :
1:load data inpath ‘path’ into table xxx partition(partition_fields partiton_type)
2:insert into table table_a partition(partition_fields partition_type)
select * from table_b ;
使用insert 的時(shí)候 ,需要注意前后表的表的字做搏段數(shù)目是匹配的,
如果表的前后字段是不匹配的話,那么就是會(huì)報(bào)錯(cuò)。
向分區(qū)表之中插入數(shù)據(jù)的時(shí)候,根據(jù)數(shù)據(jù)的某個(gè)字段的值,來(lái)創(chuàng)建分區(qū),
以及決定數(shù)據(jù)入到哪一個(gè)分區(qū)之中。
sql demo:
對(duì)一個(gè)分區(qū) 進(jìn)行動(dòng)態(tài)分區(qū):
首先要設(shè)置兩個(gè)參數(shù):
set hive.exec.dynamici.partition=true;
set hive.exec.dynamic.partition.mode=nostrict
然后就是可以使用動(dòng)態(tài)分區(qū)了。
分區(qū)值的推斷,是根據(jù)后面查詢(xún)的最后字段來(lái)決定的,只有一個(gè)分區(qū),
那么就是查詢(xún)的最后一個(gè)字段,如果是兩個(gè),那么就是從后往前的字段進(jìn)行匹配。
insert into table pp partition(`date`) select name,age,`date` from par;
這里的sql demo
是將par 的`date` 字段 作為pp表之中 `date`分區(qū)的取值。
部分動(dòng)態(tài)分區(qū):
就是多個(gè)分區(qū),但是前面的分區(qū)的取值是取靜態(tài)的,然后后面的分區(qū)的取值是未定的。
類(lèi)似于 partition(country=’china’,city)
這里需要注意的是順序,靜態(tài)分區(qū)在前面,動(dòng)態(tài)分區(qū)在后面。
然后就是多個(gè)分區(qū),完全的動(dòng)態(tài)分區(qū):
完全動(dòng)態(tài)分區(qū)的時(shí)候,就是使用后面select 查詢(xún)的表進(jìn)行分區(qū)數(shù)據(jù)的匹配。
、
動(dòng)態(tài)分區(qū)在實(shí)際使用的時(shí)候會(huì)遇到的問(wèn)題:
動(dòng)態(tài)分區(qū)的一個(gè)使用場(chǎng)景:
首先加載數(shù)據(jù)到一個(gè)表格a之中,然后將這個(gè)表格之中再次轉(zhuǎn)化到另外一個(gè)
表格b之中,表a轉(zhuǎn)化到表b的時(shí)候,使用動(dòng)態(tài)分區(qū)。
因?yàn)橹苯邮褂胠oad 加山亮載數(shù)據(jù)的時(shí)候,對(duì)于分區(qū)表而言,加載數(shù)據(jù)只能指定固定的分區(qū)名,
無(wú)法使用動(dòng)態(tài)分區(qū)來(lái)加載數(shù)據(jù)。
相應(yīng)的問(wèn)題就是:
如果a表本身含有很多的文件,那么使用動(dòng)態(tài)分區(qū)的時(shí)候,
那么在b表的時(shí)候,就是會(huì)產(chǎn)生很多的小文件。
原因如下:
如果 a表之中數(shù)據(jù)文件是200個(gè),
那么動(dòng)態(tài)分區(qū)的時(shí)候,可能會(huì)產(chǎn)生200個(gè)map,
然后一個(gè)map包含的數(shù)據(jù)之中,可能有多個(gè)分區(qū)的取值,
所以一個(gè)map 會(huì)產(chǎn)生多個(gè)文件。
所以后果就是,在新的b表之中的每個(gè)分區(qū)下面,會(huì)產(chǎn)生很多的小文件。
總結(jié)來(lái)說(shuō):不好的影響就是可能會(huì)產(chǎn)生很多的小文件。
解決的方式:
因?yàn)閯?dòng)態(tài)分區(qū)轉(zhuǎn)化成為的mapredue job 是沒(méi)有reduce,所以數(shù)目不好控制,
所以可以采用的方式,就是手動(dòng)增加reduce的數(shù)目,
可以使用distributed by 來(lái)增加 reduce的數(shù)目。
insert into table table_a partition(‘partition_name’)
select * from table_b
dirtribute by partitoin_name
但是這樣的方式,就是可能導(dǎo)致 reduce之間包含的數(shù)據(jù)量的不均勻。
所以解決的方法就是:
distribute by rand()
使用hash 隨機(jī)分區(qū),這樣的方式,來(lái)講數(shù)據(jù)均勻分配到reduce之中。
然后每個(gè)reduce 會(huì)產(chǎn)生 分區(qū)取值數(shù)目的文件,
例子: reduce數(shù)目為 200 分區(qū)的取值數(shù)位24
那么最后產(chǎn)生的文件的數(shù)目就是 200* 24個(gè)文件。
其實(shí)可以通過(guò)exlpain 來(lái)解析sql的執(zhí)行計(jì)劃,這樣的話,
可以看出是否具有reduce操作。
查詢(xún)表的分區(qū)信息:
show partitions table_name
向分區(qū)表之中增加分區(qū):
alter table table_name add partition(pfield=pvalue,…)
如果表格之中有多個(gè)分區(qū)的話,那么增加分區(qū)的時(shí)候,也是多個(gè)分區(qū)
一同增加的。
刪除分區(qū):
alter table table_name drop partition(pfield=pval)
分區(qū)信息修改:
分區(qū)信息的修改分為 分區(qū)名的修改 和 分區(qū)數(shù)據(jù)的修改 兩種
分區(qū)名的修改
alter table table_name partition(pfield=pvalue) rename to partition(pfield=pvalue)
分區(qū)數(shù)據(jù)的修改:
hive 不分區(qū)擴(kuò)展數(shù)據(jù)庫(kù)的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于hive 不分區(qū)擴(kuò)展數(shù)據(jù)庫(kù),Hive擴(kuò)展數(shù)據(jù)庫(kù):無(wú)需分區(qū)化,hive 分區(qū)表的信息別忘了在本站進(jìn)行查找喔。
四川成都云服務(wù)器租用托管【創(chuàng)新互聯(lián)】提供各地服務(wù)器租用,電信服務(wù)器托管、移動(dòng)服務(wù)器托管、聯(lián)通服務(wù)器托管,云服務(wù)器虛擬主機(jī)租用。成都機(jī)房托管咨詢(xún):13518219792
創(chuàng)新互聯(lián)(www.cdcxhl.com)擁有10多年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開(kāi)發(fā)經(jīng)驗(yàn)、開(kāi)啟建站+互聯(lián)網(wǎng)銷(xiāo)售服務(wù),與企業(yè)客戶共同成長(zhǎng),共創(chuàng)價(jià)值。
本文標(biāo)題:Hive擴(kuò)展數(shù)據(jù)庫(kù):無(wú)需分區(qū)化(hive不分區(qū)擴(kuò)展數(shù)據(jù)庫(kù))
網(wǎng)站URL:http://www.5511xx.com/article/cdsjpei.html


咨詢(xún)
建站咨詢(xún)
