一個(gè)hive任務(wù),如何才算是優(yōu)化的任務(wù),hadoop job config里哪些配置能影響hive的效率。看看hive的詳細(xì)配置我們可以略知一二。
hive的配置:
hive.ddl.output.format:hive的ddl語句的輸出格式,默認(rèn)是text,純文本,還有json格式,這個(gè)是0.90以后才出的新配置;
hive.exec.script.wrapper:hive調(diào)用腳本時(shí)的包裝器,默認(rèn)是null,如果設(shè)置為python的話,那么在做腳本調(diào)用操作時(shí)語句會(huì)變?yōu)閜ython <script command>,null的話就是直接執(zhí)行<script command>;
hive.exec.plan:hive執(zhí)行計(jì)劃的文件路徑,默認(rèn)是null,會(huì)在運(yùn)行時(shí)自動(dòng)設(shè)置,形如hdfs://xxxx/xxx/xx;
hive.exec.scratchdir:hive用來存儲(chǔ)不同階段的map/reduce的執(zhí)行計(jì)劃的目錄,同時(shí)也存儲(chǔ)中間輸出結(jié)果,默認(rèn)是/tmp/<user.name>/hive,我們實(shí)際一般會(huì)按組區(qū)分,然后組內(nèi)自建一個(gè)tmp目錄存儲(chǔ);
hive.exec.submitviachild:在非local模式下,決定hive是否要在獨(dú)立的jvm中執(zhí)行map/reduce;默認(rèn)是false,也就是說默認(rèn)map/reduce的作業(yè)是在hive的jvm上去提交的;
hive.exec.script.maxerrsize:當(dāng)用戶調(diào)用transform或者map或者reduce執(zhí)行腳本時(shí),最大的序列化錯(cuò)誤數(shù),默認(rèn)100000,一般也不用修改;
hive.exec.compress.output:一個(gè)查詢的最后一個(gè)map/reduce任務(wù)輸出是否被壓縮的標(biāo)志,默認(rèn)為false,但是一般會(huì)開啟為true,好處的話,根據(jù)這篇文章,節(jié)省空間不說,在不考慮cpu壓力的時(shí)候會(huì)提高io;
hive.exec.compress.intermediate:類似上個(gè),在一個(gè)查詢的中間的map/reduce任務(wù)輸出是否要被壓縮,默認(rèn)false,但一般也會(huì)手動(dòng)開啟,這篇文章對比了這兩個(gè)配置,其中回復(fù)講到,The former affects compression between MapReduce stages in a Hive query. The latter affects compression between map and reduce phases during the shuffle. 如此而已;
hive.jar.path:當(dāng)使用獨(dú)立的jvm提交作業(yè)時(shí),hive_cli.jar所在的位置,無默認(rèn)值;
hive.aux.jars.path:當(dāng)用戶自定義了UDF或者SerDe,這些插件的jar都要放到這個(gè)目錄下,無默認(rèn)值;
hive.partition.pruning:在編譯器發(fā)現(xiàn)一個(gè)query語句中使用分區(qū)表然而未提供任何分區(qū)謂詞做查詢時(shí),拋出一個(gè)錯(cuò)誤從而保護(hù)分區(qū)表,默認(rèn)是nonstrict;(待讀源碼后細(xì)化,網(wǎng)上資料極少)
hive.map.aggr:map端聚合是否開啟,默認(rèn)開啟;這篇文章給出了map端聚合的很詳細(xì)的描述;
hive.join.emit.interval:在發(fā)出join結(jié)果之前對join最右操作緩存多少行的設(shè)定,默認(rèn)1000;hive jira里有個(gè)對該值設(shè)置太小的bugfix;
hive.map.aggr.hash.percentmemory:map端聚合時(shí)hash表所占用的內(nèi)存比例,默認(rèn)0.5,這個(gè)在map端聚合開啟后使用,參看hive.map.aggr里提到的文章;
hive.default.fileformat:CREATE TABLE語句的默認(rèn)文件格式,默認(rèn)TextFile,其他可選的有SequenceFile、RCFile還有Orc;對于文件格式的說明對比,這里有篇對比可以參考,infoq上有篇文章講了hadoop的文件格式;
hive.merge.mapfiles:在只有map的作業(yè)結(jié)束時(shí)合并小文件,默認(rèn)開啟true;
hive.merge.mapredfiles:在一個(gè)map/reduce作業(yè)結(jié)束后合并小文件,默認(rèn)不開啟false;
hive.merge.size.per.task:作業(yè)結(jié)束時(shí)合并文件的大小,默認(rèn)256MB;
hive.merge.smallfiles.avgsize:在作業(yè)輸出文件小于該值時(shí),起一個(gè)額外的map/reduce作業(yè)將小文件合并為大文件,小文件的基本閾值,設(shè)置大點(diǎn)可以減少小文件個(gè)數(shù),需要mapfiles和mapredfiles為true,默認(rèn)值是16MB;