新聞中心
在大數(shù)據(jù)處理中,Hive是一款開源的數(shù)據(jù)倉庫工具,它能夠將海量數(shù)據(jù)進行分析和存儲。Hive基于Hadoop的分布式文件系統(tǒng)HDFS,使用類SQL語言,支持以MapReduce作為底層計算引擎。

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


咨詢
建站咨詢
