版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
理解并熟記調(diào)優(yōu)Hive方法理解并熟記調(diào)優(yōu)Hive存儲方法理解并熟記調(diào)優(yōu)HiveQL方法
本任務(wù)以“學生信息系統(tǒng)”項目為實操載體,完成理解Hive參數(shù)調(diào)優(yōu)的作用,能熟練調(diào)優(yōu)常見的提升Hive性能的參數(shù),熟記參數(shù)項及參數(shù)值等學習目標。任務(wù)1調(diào)優(yōu)Hive參數(shù)Hive參數(shù)調(diào)優(yōu)本任務(wù)實施以“學生信息系統(tǒng)”項目為實操載體,依次完成配置本地模式、配置strict模式、配置動態(tài)分區(qū)、配置并行執(zhí)行、配置Fetch抓取和配置合并文件等操作,最終熟練掌握Hive參數(shù)調(diào)優(yōu)方法。任務(wù)1調(diào)優(yōu)Hive參數(shù)8.1.1
配置本地模式任務(wù)1調(diào)優(yōu)Hive參數(shù)在大多數(shù)情況下,HadoopJob須使用分布式執(zhí)行的方式來處理大數(shù)據(jù)集,但是當要處理的數(shù)據(jù)很小時,使用分布式執(zhí)行的方式處理數(shù)據(jù)則會增長開銷,因為完全分布式模式的啟動時間較長,甚至比數(shù)據(jù)處理時間都長。Hive可以通過設(shè)置屬性來將數(shù)據(jù)處理作業(yè)自動轉(zhuǎn)換為本地模式,即使用單臺機器處理所有的任務(wù),這對于小數(shù)據(jù)集處理而言可以明顯縮短其執(zhí)行時間。8.1.1
配置本地模式任務(wù)1調(diào)優(yōu)Hive參數(shù)配置本地模式相關(guān)的參數(shù)項及描述如下表所示:參數(shù)項參數(shù)描述默認值hive.exec.mode.local.auto設(shè)置是否開啟Hive的本地模式falsehive.exec.mode.local.auto.inputbytes.max設(shè)置Job輸入數(shù)據(jù)的最大值134217728hive.exec.mode.local.auto.input.files.max設(shè)置Job輸入文件個數(shù)的最大值48.1.1
配置本地模式任務(wù)1調(diào)優(yōu)Hive參數(shù)若使用Hive客戶端臨時配置本地模式,命令如下:sethive.exec.mode.local.auto=true;若需要永久配置本地模式,則需要在Hive配置文件中添加如下配置內(nèi)容:
<property><name>hive.exec.mode.local.auto</name><value>true</value></property>8.1.2配置strict模式任務(wù)1調(diào)優(yōu)Hive參數(shù)Hive中有嚴格模式,由參數(shù)項hive.mapred.mode控制,默認處于nostrict非嚴格模式。在嚴格模式下,主要體現(xiàn)在以下三個方面的限制,第一,對分區(qū)表的查詢必須指定分區(qū)字段;第二,查詢語句中ORDERBY必須指定LIMIT;第三,禁止執(zhí)行笛卡爾積查詢。8.1.2配置strict模式任務(wù)1調(diào)優(yōu)Hive參數(shù)若使用Hive客戶端臨時配置嚴格模式,命令如下:sethive.mapred.mode=strict;若需要永久配置嚴格模式,則需要在Hive配置文件中添加如下配置內(nèi)容:
<property><name>hive.mapred.mode</name><value>strict</value></property>關(guān)閉嚴格模式:sethive.mapred.mode=nostrict;8.1.3配置動態(tài)分區(qū)任務(wù)1調(diào)優(yōu)Hive參數(shù)首先,動態(tài)分區(qū)插入數(shù)據(jù)時,將會產(chǎn)生大量小文件,map數(shù)據(jù)會增加,同時namenode也需要存儲更多元數(shù)據(jù)信息,檢索更多小文件。然后,可能引發(fā)數(shù)據(jù)傾斜問題。例如,AB倆表分區(qū)列一致,當將A表數(shù)據(jù)導入到B表,A表中分區(qū)很多,則需要復制粘貼修改很多次sql來執(zhí)行數(shù)據(jù)插入B表,效率比較低。如果程序員選擇使用動態(tài)分區(qū)方式插入數(shù)據(jù)到B表以減少自身工作量,則hadoop會生成虛假reduce個數(shù),真實的reduce個數(shù),也就是處理數(shù)據(jù)reduce節(jié)點和分區(qū)數(shù)一致,其他的reduce都是空跑。如果導入數(shù)據(jù)極大,redue個數(shù)很少,會產(chǎn)生嚴重的數(shù)據(jù)傾斜。因此,基于以上原因,如非必須,建議少用動態(tài)分區(qū),或者關(guān)閉動態(tài)分區(qū)。8.1.3配置動態(tài)分區(qū)任務(wù)1調(diào)優(yōu)Hive參數(shù)配置動態(tài)分區(qū)相關(guān)的參數(shù)項及描述如下表所示:參數(shù)項參數(shù)描述默認值hive.exec.dynamic.partition設(shè)置是否開啟動態(tài)分區(qū)功能falsehive.exec.dynamic.partition.mode設(shè)置是否允許分區(qū)列全部為動態(tài)分區(qū)stricthive.exec.max.dynamic.partitions設(shè)置一個動態(tài)分區(qū)創(chuàng)建語句可以創(chuàng)建的最大動態(tài)分區(qū)個數(shù)1000hive.exec.max.dynamic.partitions.pernode設(shè)置每個mapper或reducer可以創(chuàng)建的最大動態(tài)分區(qū)個數(shù)1008.1.4配置并行執(zhí)行任務(wù)1調(diào)優(yōu)Hive參數(shù)Hive在執(zhí)行復雜HiveQL語句時,會涉及多個任務(wù),默認情況下每個任務(wù)時順序執(zhí)行的,如果每個任務(wù)沒有前后依賴關(guān)系,那么可以通過并發(fā)執(zhí)行的方式使多個任務(wù)同時執(zhí)行,從而縮短HiveQL語句的執(zhí)行時間,可以將參數(shù)hive.exec.parallel的參數(shù)值設(shè)置為true開啟Hive并行執(zhí)行。8.1.4配置并行執(zhí)行任務(wù)1調(diào)優(yōu)Hive參數(shù)配置并行執(zhí)行相關(guān)的參數(shù)項及描述如下表所示:參數(shù)項參數(shù)描述默認值hive.exec.parallel設(shè)置是否開啟并行執(zhí)行功能falsehive.exec.parallel.thread.number設(shè)置并行運行的最大值88.1.4配置并行執(zhí)行任務(wù)1調(diào)優(yōu)Hive參數(shù)若使用Hive客戶端臨時配置并行執(zhí)行,命令如下:sethive.exec.parallel=true;若需要永久配置并行執(zhí)行,則需要在Hive配置文件中添加如下配置內(nèi)容:<property><name>hive.exec.parallel</name><value>true</value></property>8.1.5配置Fetch抓取任務(wù)1調(diào)優(yōu)Hive參數(shù)Fetch抓取是指,Hive中對某些簡單查詢不必使用MapReduce計算,因為啟用MapReduceJob需要更多時間和更多系統(tǒng)開銷,配置Fetch抓取相關(guān)的參數(shù)項及描述如下表所示:參數(shù)項參數(shù)描述默認值hive.fetch.task.conversion設(shè)置是否開啟Fetch抓取,有以下三個取值:none:表示關(guān)閉Fetchtask優(yōu)化;minimal:表示在SELECT*、使用分區(qū)列過濾、帶有LIMIT的語句上執(zhí)行Fetchtask優(yōu)化;more:在minimal基礎(chǔ)上更加強大,SELECT*外,還可以單獨選擇列,filter不再局限于分區(qū)字段,支持列別名。more8.1.5配置Fetch抓取任務(wù)1調(diào)優(yōu)Hive參數(shù)若使用Hive客戶端臨時配置Fetch抓取,命令如下:sethive.fetch.task.conversion=more;若需要永久配置Fetch抓取,則需要在Hive配置文件中添加如下配置內(nèi)容:<property><name>hive.fetch.task.conversion</name><value>more</value></property>8.1.6配置合并文件任務(wù)1調(diào)優(yōu)Hive參數(shù)在執(zhí)行包含MapReduce任務(wù)的HiveQL語句時,每個數(shù)據(jù)文件都會交給一個Map去處理,如果存在多個小數(shù)據(jù)文件,那么每個小數(shù)據(jù)文件都將啟動一個Map,造成不必要的資源浪費,因此在Map執(zhí)行之前應(yīng)該將小數(shù)據(jù)文件進行合并,合并后的數(shù)據(jù)文件再根據(jù)分片規(guī)則進行切分,在Hive中可以通過參數(shù)hive.input.format設(shè)置Map執(zhí)行前合并小文件。8.1.6配置合并文件任務(wù)1調(diào)優(yōu)Hive參數(shù)配置合并文件相關(guān)的參數(shù)項及描述如下表所示:參數(shù)項參數(shù)描述默認值hive.input.format設(shè)置是否Map執(zhí)行前合并小文件org.apache.hadoop.hive.ql.io.CombineHiveInputFormathive.merge.mapfiles設(shè)置是否合并map-only輸出文件truehive.merge.mapredfiles設(shè)置是否合并map-reduce端輸出文件falsehive.merge.size.per.task設(shè)置合并文件的大小256*1000*1000本任務(wù)的主要目標是理解為何能從存儲及壓縮方面調(diào)優(yōu)Hive性能,熟記各文件存儲格式區(qū)別及各壓縮算法區(qū)別,能在建表時熟練設(shè)置文件存儲格式及壓縮算法。任務(wù)2調(diào)優(yōu)Hive存儲Hive存儲調(diào)優(yōu)本任務(wù)實施依次完成調(diào)優(yōu)文件存儲、調(diào)優(yōu)數(shù)據(jù)壓縮等操作,最終熟練掌握Hive存儲調(diào)優(yōu)方法。任務(wù)2調(diào)優(yōu)Hive存儲8.2.1調(diào)優(yōu)文件存儲Hive底層數(shù)據(jù)是以文件的形式存儲在Hadoop的HDFS中,不同文件存儲格式不僅對存儲空間占用的大小有所不同,而且對HiveQL語句的執(zhí)行性能也有所不同,因此根據(jù)實際應(yīng)用場景選擇合理的文件存儲格式就變得尤為重要。Hive數(shù)據(jù)表支持多種類型的文件存儲格式存儲數(shù)據(jù)文件,如下表所示:任務(wù)2調(diào)優(yōu)Hive存儲文件存儲格式存儲方式自身支持壓縮支持分片加載數(shù)據(jù)方式TextFile行式存儲否否LOAD和INSERTSequenceFile列式存儲是是INSERTORCFile行列存儲是是INSERT8.2.1調(diào)優(yōu)文件存儲在實際生產(chǎn)環(huán)境中,通常使用ORCFile與Snappy相組合或ORCFile與ZLIB相組合的搭配方式設(shè)置Hive表的存儲及壓縮格式。若需要節(jié)省存儲空間,對Hive語句執(zhí)行速度不做太高要求,則使用ORCFile與ZLIB相組合的搭配方式。若需要Hive語句執(zhí)行效率高效,對存儲空間不做要求,則使用ORCFile與Snappy相組合的搭配方式。任務(wù)2調(diào)優(yōu)Hive存儲8.2.1調(diào)優(yōu)文件存儲【例】在創(chuàng)建Hive時指定存儲格式為ORCFile并執(zhí)行壓縮格式為Snapp任務(wù)2調(diào)優(yōu)Hive存儲CREATETABLEstudentdb.class(cnameSTRINGCOMMENT'班級名稱',cIDSTRINGCOMMENT'班級編號',majorSTRINGCOMMENT'專業(yè)')ROWFORMATDELIMITEDFIELDSTERMINATEDBY'\t'LINESTERMINATEDBY'\n'STOREDASORCTBLPROPERTIES('press'='SNAPPY');8.2.2調(diào)優(yōu)數(shù)據(jù)壓縮1、壓縮原因HiveJob最終被轉(zhuǎn)換成MapReduce任務(wù)來執(zhí)行。MapReduceJob屬于I/O密集型,即MapReduce的性能瓶頸主要在于網(wǎng)絡(luò)I/O和磁盤I/O,尤其是在數(shù)據(jù)Shuffle的過程中,減少數(shù)據(jù)量的傳輸會極大提升MapReduce任務(wù)的性能。采用數(shù)據(jù)壓縮是減少數(shù)據(jù)量的一個有效方式,雖然壓縮會消耗CPU資源,但是在Hadoop集群中,性能瓶頸不是CPU所承擔的計算壓力,壓縮可以充分利用空閑的CPU。任務(wù)2調(diào)優(yōu)Hive存儲8.2.2調(diào)優(yōu)數(shù)據(jù)壓縮2、常用壓縮算法比較Hive支持的壓縮算法包括Gzip、Snappy、LZO和Bzip2,CDH版本默認采用的是Snappy。上述幾種壓縮算法的對比如表所示。任務(wù)2調(diào)優(yōu)Hive存儲壓縮算法支持拆分Hive自帶壓縮率壓縮/解壓縮速度Gzip否是很高比較快LZO是是比較高很快Snappy否是比較高很快Bzip2是否最高慢8.2.2調(diào)優(yōu)數(shù)據(jù)壓縮3、配置壓縮Hive提供了兩種配置壓縮方式:中間數(shù)據(jù)壓縮、最終數(shù)據(jù)壓縮。(1)配置中間數(shù)據(jù)壓縮中間數(shù)據(jù)壓縮,即Hive的中間數(shù)據(jù)壓縮功能,也就是在MapReduce的Shuffle階段對Map端產(chǎn)生的中間結(jié)果數(shù)據(jù)進行壓縮。中間數(shù)據(jù)壓縮相關(guān)的參數(shù)項及描述如下表所示:任務(wù)2調(diào)優(yōu)Hive存儲參數(shù)項參數(shù)描述默認值ermediate設(shè)置是否開啟中間數(shù)據(jù)壓縮falsepression.codec設(shè)置中間數(shù)據(jù)壓縮算法press.DefaultCodec8.2.2調(diào)優(yōu)數(shù)據(jù)壓縮(2)配置最終數(shù)據(jù)壓縮最終壓縮算法,顧名思義就是控制最終輸出的內(nèi)容是否壓縮。最終數(shù)據(jù)壓縮相關(guān)的參數(shù)項及描述如下表所示:任務(wù)2調(diào)優(yōu)Hive存儲參數(shù)項參數(shù)描述默認值press.output設(shè)置是否開啟最終數(shù)據(jù)壓縮falsepression.codec設(shè)置最終數(shù)據(jù)壓縮算法press.DefaultCodec
本任務(wù)的主要目標是理解HiveQL中列裁剪、分區(qū)裁剪、MapJoin、GroupBy的調(diào)優(yōu)原理,并能根據(jù)實際問題運用到HiveQL查詢語句中,以提升Hive分析查詢性能。任務(wù)3調(diào)優(yōu)HiveQLHiveQL調(diào)優(yōu)本任務(wù)實施依次完成配置列裁剪、配置分區(qū)裁剪、配置MapJoin、配置GROUPBY和調(diào)優(yōu)表設(shè)計等操作,最終熟練掌握HiveQL調(diào)優(yōu)方法。任務(wù)3調(diào)優(yōu)HiveQL8.3.1配置列裁剪在利用HiveQL查詢數(shù)據(jù)時,有的任務(wù)需要獲取表內(nèi)所有的數(shù)據(jù),有的任務(wù)只需要讀取某些列的數(shù)據(jù)。當只需要讀取部分列時,可以通過列裁剪節(jié)省讀取開銷,中間表存儲開銷及數(shù)據(jù)整合開銷。配置列裁剪相關(guān)的參數(shù)項及描述如下表所示:任務(wù)3調(diào)優(yōu)HiveQL參數(shù)項參數(shù)描述默認值hive.optimize.cp設(shè)置是否開啟Hive的列裁剪true8.3.1配置列裁剪若使用Hive客戶端臨時配置列裁剪,命令如下:sethive.optimize.cp=true;若需要永久配置列裁剪,則需要在Hive配置文件中添加如下配置內(nèi)容:<property><name>hive.optimize.cp</name><value>true</value></property>任務(wù)3調(diào)優(yōu)HiveQL8.3.2配置分區(qū)裁剪在Hive中,可以從多個維度對表進行分區(qū),并且分區(qū)可以嵌套。當有需要對目標表的某一個區(qū)域內(nèi)的數(shù)據(jù)進行分析而不需要涉及其他區(qū)域時,可以使用分區(qū)裁剪,將目標區(qū)域以條件的形式放在HiveQL中。配置分區(qū)裁剪相關(guān)的參數(shù)項及描述如下表所示:任務(wù)3調(diào)優(yōu)HiveQL參數(shù)項參數(shù)描述默認值hive.optimize.pruner設(shè)置是否開啟Hive的分區(qū)裁剪true8.3.2配置分區(qū)裁剪若使用Hive客戶端臨時配置分區(qū)裁剪,命令如下:sethive.optimize.pruner=true;若需要永久配置分區(qū)裁剪,則需要在Hive配置文件中添加如下配置內(nèi)容:<property>
<name>hive.optimize.pruner</name><value>true</value></property>任務(wù)3調(diào)優(yōu)HiveQL8.3.3配置MapJoinHive支持Join多表連接查詢,如內(nèi)連接、左外連接、右外連接、全外連接、半連接等。Join操作的基本原則是,將小表或子查詢放在Join操作符的左邊,因為在執(zhí)行Join操作的Reduce階段時,Join操作符左邊的表會被加載進內(nèi)存,此外將小表放在Join操作符的左邊可以減少發(fā)生內(nèi)存溢出錯誤的概率。如果一個表足夠小,則可以使用MapJoin將其整體讀入內(nèi)存中。Join的操作會在Map階段完成,即在Map階段會直接將另外一張表的數(shù)據(jù)和內(nèi)存中表的數(shù)據(jù)進行匹配,而不需要經(jīng)過Shuffle階段,這可以在一定程度上節(jié)省資源,提高Join操作的效率。任務(wù)3調(diào)優(yōu)HiveQL8.3.3配置MapJoin配置分區(qū)裁剪相關(guān)的參數(shù)項及描述如下表所示:任務(wù)3調(diào)優(yōu)HiveQL參數(shù)項參數(shù)描述默認值hive.auto.convert.join設(shè)置是否自動使用MapJoin優(yōu)化truehive.mapjoin.smalltable.filesize設(shè)置MapJoin優(yōu)化的表大小,如果表大小小于該設(shè)置值,則其就會被加載進內(nèi)存中250000008.3.3配置MapJoin若使用Hive客戶端臨時配置啟用MapJoin優(yōu)化,命令如下:sethive.auto.convert.join=true;若需要永久配置啟用MapJoin優(yōu)化,則需要在Hive配置文件中添加如下配置內(nèi)容:<property>
<name>hive.auto.convert.join</name><value>true</value></property>任務(wù)3調(diào)優(yōu)HiveQL8.3.4配置GROUPBY默認情況下,Map階段相同Key的數(shù)據(jù)分發(fā)給同一個Reduce,當某個Key數(shù)據(jù)量過大時就會發(fā)生數(shù)據(jù)傾斜。在進行GROUPBY操作時,并不是所有的聚合操作都只能在Reduce完成,很多聚合操作可以先在Map進行部分聚合,最后在Reduce端得出最終結(jié)果。配置聚合相關(guān)的參數(shù)項及描述如下表所示:任務(wù)3調(diào)優(yōu)HiveQL參數(shù)項參數(shù)描述默認值hive.map.aggr設(shè)置是否在Map端進行聚合truehive.groupby.mapaggr.checkinterval設(shè)置在map端進行聚合的條目數(shù)100000hive.groupby.skewindata設(shè)置有數(shù)據(jù)傾斜時是否進行負載均衡false8.3.4配置GROUPBY若使用Hive客戶端臨時配置啟用聚合優(yōu)化,命令如下:sethive.map.aggr=true;若需要永久配置聚合優(yōu)化,則需要在Hive配置文件中添加如下配置內(nèi)容:<property>
<name>hive.map.aggr</name><value>true</value></property>任務(wù)3調(diào)優(yōu)HiveQL8.3.5調(diào)優(yōu)表設(shè)計1、優(yōu)先
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 財務(wù)人員不按照財務(wù)制度
- 代帳公司財務(wù)制度
- 工業(yè)園區(qū)管委會財務(wù)制度
- 酒店相關(guān)財務(wù)制度
- 公司受托人制度
- 養(yǎng)老院老人緊急救援人員職業(yè)發(fā)展規(guī)劃制度
- 養(yǎng)老院老人活動場地設(shè)施管理制度
- 大學活動策劃方案生(3篇)
- 格溝施工方案(3篇)
- 三八洗浴活動方案策劃(3篇)
- 《養(yǎng)老服務(wù)政策法規(guī)與標準》智慧健康養(yǎng)老服務(wù)專業(yè)全套教學課件
- 知識付費商業(yè)模式設(shè)計
- 無錫車聯(lián)天下信息技術(shù)有限公司智能網(wǎng)聯(lián)汽車車載顯示模組研發(fā)及智能化生產(chǎn)項目環(huán)評資料環(huán)境影響
- 抹灰層陰陽角方正度控制技術(shù)
- 【SA8000標準(社會責任標準)對我國勞動密集型產(chǎn)業(yè)的影響及應(yīng)對措施研究12000字(論文)】
- 醫(yī)療行業(yè)知識產(chǎn)權(quán)教育的必要性
- 2024-2025學年滬教版(五四學制)(2024)初中英語六年級下冊(全冊)知識點歸納
- 五年級數(shù)學下冊寒假作業(yè)每日一練
- 傳染病院感防控課件
- 實習生醫(yī)德醫(yī)風培訓
- 橫穿公路管道施工方案
評論
0/150
提交評論