




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
Hive模式設(shè)計(jì)及優(yōu)化Hive模式設(shè)計(jì)—按天劃分的表當(dāng)數(shù)據(jù)集增長很快時(shí),傳統(tǒng)關(guān)系型數(shù)據(jù)庫通常使用按天劃分的表,對應(yīng)hive,應(yīng)該使用分區(qū)表。Hive通過where子句中的表達(dá)式來選擇查詢所需要的指定的分區(qū),這樣的查詢執(zhí)行效率高。CREATETABLEsales(idSTRING,numINT,amountdouble,regionSTRING)PARTITIONEDBY(ymdString)ROWFORMATDELIMITEDFIELDSTERMINATEDBY',';Hive模式設(shè)計(jì)—分區(qū)過多的問題Hdfs用于存儲數(shù)百萬的大文件,而非數(shù)十億的小文件。使用過多分區(qū)可能導(dǎo)致創(chuàng)建大量的非必須的hadoop文件和文件夾。一個(gè)分區(qū)對應(yīng)著一個(gè)包含多個(gè)文件的文件夾。如果存在大量文件,那么最終就會超出namenode對系統(tǒng)云數(shù)據(jù)信息的處理能力。Mapreduce會將一個(gè)任務(wù)(job)轉(zhuǎn)換成多個(gè)任務(wù)(task),默認(rèn)情況下,每個(gè)task都是一個(gè)新的JVM實(shí)例,都需要開啟和銷毀的開銷。對于小文件,每個(gè)文件都會對應(yīng)一個(gè)task。在一些情況下,JVM開啟和銷毀的時(shí)間中銷毀可能會比實(shí)際處理數(shù)據(jù)的時(shí)間消耗更長。Hive模式設(shè)計(jì)—分區(qū)過多的問題一個(gè)理想的分區(qū)方案不應(yīng)該產(chǎn)生太多的分區(qū),分區(qū)對應(yīng)的文件夾下的文件應(yīng)該足夠的大,應(yīng)該是文件系統(tǒng)中塊大小的若干倍。分區(qū)策略按時(shí)間范圍進(jìn)行分區(qū)是按照不同的時(shí)間粒度來確定合適大小的數(shù)據(jù)積累量。使用兩個(gè)級別的分區(qū)并且使用不同的維度。例如,第一個(gè)分區(qū)按照天進(jìn)行劃分,而二級分區(qū)按照區(qū)域進(jìn)行劃分。如果不能找到好的、大小相對合適的分區(qū)方式,可以使用分桶存儲。Hive模式設(shè)計(jì)—分桶表數(shù)據(jù)存儲CREATETABLEsales_p(id STRING,num INT,amountdouble,regionSTRING)PARTITIONEDBY(ymd
String,id STRING) ROWFORMATDELIMITEDFIELDSTERMINATEDBY',';并非所有的數(shù)據(jù)集都可以形成合理的分區(qū),而且分區(qū)對應(yīng)的文件要足夠大。分桶是將數(shù)據(jù)集分解成更容易管理的若干部分的另一個(gè)技術(shù)。Hive模式設(shè)計(jì)—分桶表數(shù)據(jù)存儲CREATETABLEsales_b(idstring,numint,amountdouble,regionstring)PARTITIONEDBY(ymdstring)clusteredby(id)into4bucketsROWFORMATDELIMITEDFIELDSTERMINATEDBY',';Hive模式設(shè)計(jì)—同一份數(shù)據(jù)多種處理insertintotablestocks_drselect*fromstockswheresymbol=600718;insertintotablestocks_kdselect*fromstockswheresymbol=002230;Hive可以從一個(gè)數(shù)據(jù)源產(chǎn)生多個(gè)數(shù)據(jù)聚合,而無需每次聚合都要重新掃描一次。對于大的數(shù)據(jù)集,這個(gè)優(yōu)化可以節(jié)約很多時(shí)間。fromstocksinsertintotablestocks_drselect*wheresymbol=600718insertintotablestocks_xfselect*wheresymbol=002230;Hive優(yōu)化-使用explainHive提供EXPLAIN命令,顯示查詢的執(zhí)行計(jì)劃explainselectsum(num)fromsales;explainextendedselectsum(num)fromsales;Hive優(yōu)化-Join優(yōu)化Hive查詢時(shí),對每個(gè)記錄進(jìn)行連接操作時(shí),會將其他表緩存起來,然后掃描最后那個(gè)表進(jìn)行計(jì)算,因此用戶需要保證連續(xù)查詢中表的大小從左到右是依次增加的。Hive提供了一個(gè)“標(biāo)記”機(jī)制來顯式的告訴查詢優(yōu)化器哪個(gè)表是大表。select/*+streamtable(a)*/a.ymd,a.symbolHive優(yōu)化-并行執(zhí)行Hive會將一個(gè)查詢轉(zhuǎn)化成一個(gè)或者多個(gè)階段,這樣的階段可以是mapreduce階段、抽樣階段、合并階段、limit階段,或者h(yuǎn)ive執(zhí)行過程中可能需要的其他階段。默認(rèn)情況下,hive一次只會執(zhí)行一個(gè)階段。有些job可能包含多個(gè)階段,而這些階段可能并非完全相互依賴,這些階段是可以并行執(zhí)行的。設(shè)置參數(shù)hive.exec.parallel為true,可以開啟并發(fā)執(zhí)行。Hive優(yōu)化-hive嚴(yán)格模式hive提供了一個(gè)嚴(yán)格模式,可以防止用戶執(zhí)行那些可能產(chǎn)生意想不到的不好的效果的查詢。即某些查詢在嚴(yán)格模式下無法執(zhí)行。通過設(shè)置hive.mapred.mode的值為strict,可以禁止3種類型的查詢。查詢分區(qū)表的where語句中沒有包含分區(qū)字段過濾條件使用了orderby的查詢,沒有l(wèi)imit語句限制笛卡爾積的查詢Hive優(yōu)化-JVM重用JVM重用對hive的性能具有非常大的影響,特別是對于很難避免小文件的場景或者task特別多的場景,這類場景大多數(shù)執(zhí)行時(shí)間都很短。hadoop默認(rèn)配置是使用JVM來執(zhí)行map和reduce任務(wù)的,這時(shí)jvm的啟動過程可能會造成相當(dāng)大的開銷,尤其是執(zhí)行的job包含有成千上萬個(gè)task任務(wù)的情況。JVM重用可以使得JVM實(shí)例在同一個(gè)JOB中重新使用N次,N的值可以在Hadoop的mapre-site.xml文件中進(jìn)行設(shè)置mapred.job.reuse.jvm.num.tasks。Hive優(yōu)化-動態(tài)分區(qū)調(diào)整動態(tài)分區(qū)插入可以通過簡單的select語句向分區(qū)表中創(chuàng)建很多新的分區(qū)如果分區(qū)的個(gè)數(shù)太多,那么就會在系統(tǒng)中產(chǎn)生大量的輸出控制流,因此配置限制動態(tài)分區(qū)數(shù)量很有必要。通過參數(shù)hive.exec.dynamic.partition.mode設(shè)置動態(tài)分區(qū)模式為嚴(yán)格模式(strict)通過參數(shù)hive.exec.max.dynamic.partitions限制可以創(chuàng)建的總的最大動態(tài)分區(qū)個(gè)數(shù)。通過參數(shù)hive.exec.max.dynamic.partitions.pernode限制在每個(gè)mapper/reducernode可以創(chuàng)建的最大動態(tài)分區(qū)個(gè)數(shù)。通過參數(shù)dfs.datanode.max.transfer.threads來控制datanode上一次可以打開的文件的數(shù)量,這個(gè)參數(shù)必須設(shè)置在datanode的hdfs-site.xml文件中.Hive的join--CommonJoinHive中的Join可分為CommonJoin(Reduce階段完成join)、MapJoin(Map階段完成join)和SMB(Sort-Merge-Bucket)如果不指定MapJoin或者不符合MapJoin的條件,那么Hive解析器會默認(rèn)執(zhí)行CommonJoin,即在Reduce階段完成join。整個(gè)過程包含Map、Shuffle、Reduce階段。Map階段
讀取源表的數(shù)據(jù),Map輸出的時(shí)候以Joinon條件中的列為key,如果Join有多個(gè)關(guān)聯(lián)鍵,則以這些關(guān)聯(lián)鍵的組合作為key;Map輸出的value為join之后所關(guān)心的(select或者where中需要用到的)列,同時(shí)在value中還會包含表的Tag信息,用于標(biāo)明此value對應(yīng)哪個(gè)表。Shuffle階段
根據(jù)key的值進(jìn)行hash,并將key/value按照hash值推送至不同的reduce中,這樣確保兩個(gè)表中相同的key位于同一個(gè)reduce中。Reduce階段
根據(jù)key的值完成join操作,期間通過Tag來識別不同表中的數(shù)據(jù)。Hive的join--CommonJoinSELECTa.id,a.dept,b.ageFROMajoinbON(a.id=b.id);Hive的join--MapjoinMapJoin通常用于一個(gè)很小的表和一個(gè)大表進(jìn)行join的場景,小表大小由參數(shù)hive.mapjoin.smalltable.filesize來決定,默認(rèn)值為25M。自動方式hive自動根據(jù)sql,選擇使用commonjoin或者mapjoin需要設(shè)置屬性hive.auto.convert.join=true手動方式select/*+mapjoin(n)*/m.col,m.col2,n.col3frommjoinnonm.col=n.col;Hive的join--MapjoinMapjoinusers表有500w+的記錄,log表里user_id有上百萬個(gè),每日的會員uv不會太多,有交易的會員不會太多,有點(diǎn)擊的會員不會太多,有傭金的會員不會太多等等。users表相對log表小些,但也無法mapjoinselect
*
fromlogaleft
outerjoin
usersbon
a.user_id
=
b.user_id;select/*+mapjoin(x)*/*fromlogaleftouterjoin(select/*+mapjoin(c)*/d.*from(selectdistinctuser_idfromlog)cjoinusersdonc.user_id=d.user_id)xona.user_id=x.user_id;Hive的join--SMB(Sort-Merge-Bucket)SortMergeBucketJoin主要是為了解決大表與大表間的Join問題,分桶其實(shí)就是把大表化成了“小表”,然后通過Map-SideJoin解決.對于JOIN操作的兩個(gè)表有一個(gè)相同的列,如果這兩個(gè)表是在連接列上建立的桶表,那么將保存相同列值的桶進(jìn)行JOIN操作就可以大大較少JOIN的數(shù)據(jù)量.hivejoin數(shù)據(jù)傾斜數(shù)據(jù)傾斜(skew)使得某個(gè)reducer要處理的數(shù)據(jù)特別多,而其他reducer要處理的很少,任務(wù)進(jìn)度長時(shí)間維持在99%(或100%).hivejoin數(shù)據(jù)傾斜join的key值發(fā)生傾斜,key值包含很多空值,對空值賦一個(gè)隨機(jī)值來分散keyselectuserid,namefromuser_infoajoin(selectcasewhenuseridisnullthencast(rand(47)*100000asint)elseuseridendfromuser_read_log)bona.userid=b.useridhivejoin數(shù)據(jù)傾
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國嵌入標(biāo)志燈數(shù)據(jù)監(jiān)測研究報(bào)告
- 2025至2030年中國不銹鋼立式氧氣瓶推車數(shù)據(jù)監(jiān)測研究報(bào)告
- 河北省衡水市阜城實(shí)驗(yàn)中學(xué)2024-2025學(xué)年高一下學(xué)期3月月考物理試題(含答案)
- 2019-2025年軍隊(duì)文職人員招聘之軍隊(duì)文職法學(xué)通關(guān)題庫(附答案)
- 遵守紀(jì)律合同范本(2篇)
- 健康產(chǎn)業(yè)智能化醫(yī)療設(shè)備研發(fā)方案設(shè)計(jì)
- 《化學(xué)元素周期表制作技巧分享》
- 小學(xué)生動物故事集征文
- 設(shè)計(jì)迭代流程圖表
- 基于物聯(lián)網(wǎng)技術(shù)的農(nóng)產(chǎn)品供應(yīng)鏈管理優(yōu)化方案
- 森林區(qū)劃 小班區(qū)劃(森林資源經(jīng)營管理)
- 馬克筆建筑快速表現(xiàn)
- 鐵路基礎(chǔ)知識考試題庫500題(單選、多選、判斷)
- 京東物流集團(tuán)介紹PPT
- 日本夏日祭活動鑒賞
- stm32F103寄存器整理列表
- 如何撰寫課程故事94
- 名校《強(qiáng)基計(jì)劃》初升高銜接數(shù)學(xué)講義(上)
- GB/T 39988-2021全尾砂膏體制備與堆存技術(shù)規(guī)范
- GB/T 3452.2-2007液壓氣動用O形橡膠密封圈第2部分:外觀質(zhì)量檢驗(yàn)規(guī)范
- GB/T 10051.1-2010起重吊鉤第1部分:力學(xué)性能、起重量、應(yīng)力及材料
評論
0/150
提交評論