




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Hive調(diào)優(yōu)的一些總結(jié)作者:KeivanChan來源:97年陳伯伯hive是基于Hadoop的一個(gè)數(shù)據(jù)倉庫工具,用來進(jìn)行數(shù)據(jù)提取、轉(zhuǎn)化、加載,這是一種可以存儲(chǔ)、查詢和分析存儲(chǔ)在Hadoop中的大規(guī)模數(shù)據(jù)的機(jī)制。hive數(shù)據(jù)倉庫工具能將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫表,并提供SQL查詢功能,能將SQL語句轉(zhuǎn)變成MapReduce任務(wù)來執(zhí)行。Hive的優(yōu)點(diǎn)是學(xué)習(xí)成本低,可以通過類似SQL語句實(shí)現(xiàn)快速M(fèi)apReduce統(tǒng)計(jì),使MapReduce變得更加簡(jiǎn)單,而不必開發(fā)專門的MapReduce應(yīng)用程序。hive是十分適合數(shù)據(jù)倉庫的統(tǒng)計(jì)分析和Windows注冊(cè)表文件;hive強(qiáng)大之處不要求數(shù)據(jù)轉(zhuǎn)換成特定的格式,而是利用hadoop本身InputFormatAPI來從不同的數(shù)據(jù)源讀取數(shù)據(jù),同樣地使用OutputFormatAPI將數(shù)據(jù)寫成不同的格式。所以對(duì)于不同的數(shù)據(jù)源,或者寫出不同的格式就需要不同的對(duì)應(yīng)的InputFormat和OutputFormat類的實(shí)現(xiàn)。以storedastextFile為例,其在底層javaAPI中表現(xiàn)是輸入InputFormat格式:TextInputFormat以及輸出OutputFormat格式:HiveIgnoreKeyTextOutputFormat。這里InputFormat中定義了如何對(duì)數(shù)據(jù)源文本進(jìn)行讀取劃分,以及如何將切片分割成記錄存入表中。而OutputFormat定義了如何將這些切片寫回到文件里或者直接在控制臺(tái)輸出。Hive擁有統(tǒng)一的元數(shù)據(jù)管理,所以和Spark、Impala等SQL引擎是通用的。通用是指,在擁有了統(tǒng)一的metastore之后,在Hive中創(chuàng)建一張表,在Spark/Impala中是能用的;反之在Spark中創(chuàng)建一張表,在Hive中也是能用的,只需要共用元數(shù)據(jù),就可以切換SQL引擎,涉及到了Sparksql和HiveOnSpark。不僅如此Hive使用SQL語法,提供快速開發(fā)的能力,還可以通過用戶定義的函數(shù)(UDF),用戶定義的聚合(UDAF)和用戶定義的表函數(shù)(UDTF)進(jìn)行擴(kuò)展,避免了去寫mapreducce,減少開發(fā)人員的學(xué)習(xí)成本。Hive中不僅可以使用逗號(hào)和制表符分隔值(CSV/TSV)文本文件,還可以使用SequenceFile、RC、ORC、Parquet(知道這幾種存儲(chǔ)格式的區(qū)別)。當(dāng)然Hive還可以通過用戶來自定義自己的存儲(chǔ)格式,基本上前面說到幾種格式完全夠了。Hive旨在最大限度地提高可伸縮性(通過向Hadoop集群動(dòng)態(tài)田間更多機(jī)器擴(kuò)展),性能,可擴(kuò)展性,容錯(cuò)性以及與其輸入格式的松散耦合。數(shù)據(jù)離線處理,比如日志分析,海量數(shù)據(jù)結(jié)構(gòu)化分析。Hive用的好,才能從數(shù)據(jù)中挖掘出更多的信息來。用過hive的朋友,我想或多或少都有類似的經(jīng)歷:一天下來,沒跑幾次hive,就到下班時(shí)間了。Hive在極大數(shù)據(jù)或者數(shù)據(jù)不平衡等情況下,表現(xiàn)往往一般,因此也出現(xiàn)了presto、spark-sql等替代品。這里重點(diǎn)講解hive的優(yōu)化方式,例如優(yōu)化分組:sethive.auto.convert.join=true;優(yōu)化表關(guān)聯(lián)內(nèi)存運(yùn)行:/*+MAPJOIN(t1,t3,t4)*/復(fù)制代碼一.表連接優(yōu)化將大表放后頭Hive假定查詢中最后的一個(gè)表是大表。它會(huì)將其它表緩存起來,然后掃描最后那個(gè)表。因此通常需要將小表放前面,或者標(biāo)記哪張表是大表:/streamtable(table_name)/使用相同的連接鍵當(dāng)對(duì)3個(gè)或者更多個(gè)表進(jìn)行join連接時(shí),如果每個(gè)on子句都使用相同的連接鍵的話,那么只會(huì)產(chǎn)生一個(gè)MapReducejob。盡量盡早地過濾數(shù)據(jù)減少每個(gè)階段的數(shù)據(jù)量,對(duì)于分區(qū)表要加分區(qū),同時(shí)只選擇需要使用到的字段。盡量原子化操作盡量避免一個(gè)SQL包含復(fù)雜邏輯,可以使用中間表來完成復(fù)雜的邏輯二.用insertinto替換unionall如果unionall的部分個(gè)數(shù)大于2,或者每個(gè)union部分?jǐn)?shù)據(jù)量大,應(yīng)該拆成多個(gè)insertinto語句,實(shí)際測(cè)試過程中,執(zhí)行時(shí)間能提升50%。示例參考如下:insertoverwitetabletablenamepartition(dt=....)select.....from(select...fromAunionallselect...fromBunionallselect...fromC)Rwhere...;可以改寫為:insertintotabletablenamepartition(dt=....)select....fromAWHERE...;insertintotabletablenamepartition(dt=....)select....fromBWHERE...;insertintotabletablenamepartition(dt=....)select....fromCWHERE...;三orderby&sortbyorderby:對(duì)查詢結(jié)果進(jìn)行全局排序消耗時(shí)間長,需要sethive.mapred.mode=nostrictsortby:局部排序,并非全局有序,提高效率。四transform+python一種嵌入在hive取數(shù)流程中的自定義函數(shù),通過transform語句可以把在hive中不方便實(shí)現(xiàn)的功能在python中實(shí)現(xiàn),然后寫入hive表中。示例語法如下:selecttransform((columnnames1})using'**.py'as(columnnames2}from(tablename}如果除python腳本外還有其它依賴資源,可以使用ADDARVHIVE。limit語句快速出結(jié)果一般情況下,Limit語句還是需要執(zhí)行整個(gè)查詢語句,然后再返回部分結(jié)果。有一個(gè)配置屬性可以開啟,避免這種情況一對(duì)數(shù)據(jù)源進(jìn)行抽樣hive.limit.optimize.enable=true---開啟對(duì)數(shù)據(jù)源進(jìn)行采樣的功臺(tái)匕能hive.limit.row.max.size---設(shè)置最小的采樣容量hive.limit.optimize.limit.file---設(shè)置最大的采樣樣本數(shù)缺點(diǎn):有可能部分?jǐn)?shù)據(jù)永遠(yuǎn)不會(huì)被處理到本地模式對(duì)于小數(shù)據(jù)集,為查詢觸發(fā)執(zhí)行任務(wù)消耗的時(shí)間〉實(shí)際執(zhí)行job的時(shí)間,因此可以通過本地模式,在單臺(tái)機(jī)器上(或某些時(shí)候在單個(gè)進(jìn)程上)處理所有的任務(wù)。setoldjobtracker=$(hiveconf:mapred.job.tracker};setmapredjob.tracker=local;setmarped.tmp.dir二/home/edward/tmp;setmapredjob.tracker=$(oldjobtracker};可以通過設(shè)置屬性hive.exec.mode.local.auto的值為true,來讓Hive在適當(dāng)?shù)臅r(shí)候自動(dòng)啟動(dòng)這個(gè)優(yōu)化,也可以將這個(gè)配置寫在$HOME/.hiverc文件中。當(dāng)一個(gè)job滿足如下條件才能真正使用本地模式:job的輸入數(shù)據(jù)大小必須小于參數(shù):hive.exec.mode.local.auto.inputbytes.max(默認(rèn)128MB)job的map數(shù)必須小于參數(shù):hive.exec.mode.local.auto.tasks.max(默認(rèn)4)job的reduce數(shù)必須為0或者1可用參數(shù)hive.mapred.local.mem(默認(rèn)0)控制child的jvm使用的最大內(nèi)存數(shù)。七并行執(zhí)行Hive會(huì)將一個(gè)查詢轉(zhuǎn)化為一個(gè)或多個(gè)階段,包括:MapReduce階段、抽樣階段、合并階段、limit階段等。默認(rèn)情況下,一次只執(zhí)行一個(gè)階段。不過,如果某些階段不是互相依賴,是可以并行執(zhí)行的。sethive.exec.parallel二true,可以開啟并發(fā)執(zhí)行。sethive.exec.parallel.thread.number=16;〃同一個(gè)sql允許最大并行度,默認(rèn)為8。會(huì)比較耗系統(tǒng)資源。八.調(diào)整mapper和reducer的個(gè)數(shù)Map階段優(yōu)化map個(gè)數(shù)的主要的決定因素有:input的文件總個(gè)數(shù),input的文件大小,集群設(shè)置的文件塊大?。J(rèn)128M,不可自定義)。參考舉例如下:假設(shè)input目錄下有1個(gè)文件a,大小為780M,那么hadoop會(huì)將該文件a分隔成7個(gè)塊(6個(gè)128m的塊和1個(gè)12m的塊),從而產(chǎn)生7個(gè)map數(shù)假設(shè)input目錄下有3個(gè)文件a,b,c,大小分別為10m,20m,130m,那么hadoop會(huì)分隔成4個(gè)塊(10m,20m,128m,2m),從而產(chǎn)生4個(gè)map數(shù)。即如果文件大于塊大?。?28m),那么會(huì)拆分,如果小于塊大小,則把該文件當(dāng)成一個(gè)塊。map^行時(shí)間:map任務(wù)啟動(dòng)和初始化的時(shí)間+邏輯處理的時(shí)間。減少map數(shù)若有大量小文件(小于128M),會(huì)產(chǎn)生多個(gè)map,處理方法是:setmapred.max.split.size=100000000;setmapred.min.split.size.per.node=100000000;setmapred.min.split.size.per.rack=100000000;前面三個(gè)參數(shù)確定合并文件塊的大小,大于文件塊大小128m的,按照128m來分隔,小于128m,大于100m的,按照100m來分隔,把那些小于100m的(包括小文件和分隔大文件剩下的)進(jìn)行合并。sethive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;-執(zhí)行前進(jìn)行小文件合并。增加map數(shù)當(dāng)input的文件都很大,任務(wù)邏輯復(fù)雜,map執(zhí)行非常慢的時(shí)候,可以考慮增加Map數(shù),來使得每個(gè)map處理的數(shù)據(jù)量減少,從而提高任務(wù)的執(zhí)行效率osetmapred.reduce.tasks二?Reduce階段優(yōu)化調(diào)整方式:setmapred.reduce.tasks二?sethive.exec.reducers.bytes.per.reducer=?—般根據(jù)輸入文件的總大小,用它的estimation函數(shù)來自動(dòng)計(jì)算reduce的個(gè)數(shù):reduc。個(gè)數(shù)=InputFileSize/bytesperreducer九.嚴(yán)格模式sethive.marped.mode=strict-舫止用戶執(zhí)行那些可能意想不至U的不好的影響的查詢分區(qū)表,必須選定分區(qū)范圍對(duì)于使用orderby的查詢,要求必須使用limit語句。因?yàn)閛rderby為了執(zhí)行排序過程會(huì)將所有的結(jié)果數(shù)據(jù)分發(fā)到同一個(gè)reducer中進(jìn)行處理限制笛卡爾積查詢:兩張表join時(shí)必須有on語句十.數(shù)據(jù)傾斜表現(xiàn):任務(wù)進(jìn)度長時(shí)間維持在99%(或100%),查看任務(wù)監(jiān)控頁面,發(fā)現(xiàn)只有少量(1個(gè)或幾個(gè))reduce子任務(wù)未完成。因?yàn)槠涮幚淼臄?shù)據(jù)量和其他reduce差異過大。單一reduce的記錄數(shù)與平均記錄數(shù)差異過大,通常可
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國純聚酯消光劑行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025至2030年中國純凈水龍頭行業(yè)投資前景及策略咨詢研究報(bào)告
- 具有低碳烴分離作用的金屬有機(jī)骨架化合物的構(gòu)筑
- 基于Wi-Fi的多場(chǎng)景跨域人體動(dòng)作識(shí)別方法研究
- 妊娠期糖尿病對(duì)子代神經(jīng)行為的影響-基于腸道菌群及糞便代謝組學(xué)研究
- 2025至2030年中國精密鍛造油市場(chǎng)現(xiàn)狀分析及前景預(yù)測(cè)報(bào)告
- 2025至2030年中國簡(jiǎn)易練習(xí)器市場(chǎng)現(xiàn)狀分析及前景預(yù)測(cè)報(bào)告
- 2025至2030年中國移動(dòng)式糧食清理篩數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國磁場(chǎng)致變性膜玻璃行業(yè)投資前景及策略咨詢報(bào)告
- 2025至2030年中國碟形跳動(dòng)式控溫器數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 中國大學(xué)生心理健康量表(CCSMHS)
- 三年級(jí)道德與法治下冊(cè)不一樣的你我他
- 專利法全套ppt課件(完整版)
- GB∕T 3639-2021 冷拔或冷軋精密無縫鋼管
- 西師版六年級(jí)下冊(cè)數(shù)學(xué)第五單元 總復(fù)習(xí) 教案
- 2022版義務(wù)教育語文課程標(biāo)準(zhǔn)(2022版含新增和修訂部分)
- 色譜、質(zhì)譜、聯(lián)用
- 獨(dú)生子女父母退休一次性獎(jiǎng)勵(lì)審批1
- 鋁合金窗陜西銀杉節(jié)能門窗有限責(zé)任公司鋁合金制作及安裝工藝流程圖
- 蘇教版小學(xué)數(shù)學(xué)四年級(jí)下冊(cè)《圖形旋轉(zhuǎn)》練習(xí)題
- 燒結(jié)普通磚、多孔磚回彈計(jì)算
評(píng)論
0/150
提交評(píng)論