Hive 配置參數(shù)匯總

主要功能 hive配置參數(shù) 作用 默認值 應(yīng)用場景
并發(fā) hive.exec.parallel=true; 多job并發(fā)
hive.exec.parallel.thread.numbe=X; 可以并行化的job數(shù) 8
輸入合并小文件 hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat; 執(zhí)行Map前進行小文件合并贸桶。一個data node節(jié)點上多個小文件會進行合并蚀瘸,合并文件數(shù)由mapred.max.split.size限制的大小決定。
hive.hadoop.supports.splittable.combineinputformat = true; 是否支持可切分的 CombieInputFormat FALSE
小文件 mapreduce.job.split.metainfo.maxsize=-1 java.io.IOException:Split metadata size exceeded 10000000涵防,小文件過多
mapreduce.jobtracker.split.metainfo.maxsize = -1
mapreduce.job.running.map.limit=50000; map數(shù)超過50000的job設(shè)置:
map數(shù) mapred.min.split.size = X; 每個Map最小輸入大小
mapred.max.split.size=X; 每個Map最大輸入大小
mapred.min.split.size.per.node=100000000; 一個節(jié)點上(datanode)split至少的大小蝇恶,
mapred.min.split.size.per.rack=100000000; 同一個交換機(rack locality)下split至少的大小
mapreduce.input.fileinputformat.split.maxsize = 256000000; mapred代表的是hadoop舊API羡鸥,而mapreduce代表的是hadoop新的API咬摇。
mapreduce.input.fileinputformat.split.minsize.per.node=256000000;
mapreduce.input.fileinputformat.split.minsize.per.rack=256000000;
reduce數(shù) hive.exec.reducers.bytes.per.reducer = X; 每個reducer處理的文件大小儡陨,默認是1GB,調(diào)整reduce數(shù)目 100000000 生成的文件大小辙售,設(shè)置每個reducer處理的數(shù)據(jù)hive.exec.reducers.bytes.per.reducer=5120000000; insert into table xxx select * from xxx distribute by rand();備注: 設(shè)置的參數(shù)是生成的文件大小轻抱,distribute by rand()保證數(shù)據(jù)的平均大小是512Mb。
hive.exec.reducers.max 控制最大的reducer的數(shù)量圾亏, 如果 input / bytes per reduce >max 則會啟動這個參數(shù)所指定的reduce個數(shù)十拣。 這個并不會影響mapre.reduce.tasks參數(shù)的設(shè)置封拧。默認的max是999 999
hive.mapred.reduce.tasks 這個參數(shù)如果指定了志鹃,hive就不會用它的estimation函數(shù)來自動計算reduce的個數(shù),而是用這個參數(shù)來啟動reducer泽西。默認是-1(reduce的個數(shù)設(shè)置其實對執(zhí)行效率有很大的影響:1)曹铃、如果reduce太少: 如果數(shù)據(jù)量很大,會導(dǎo)致這個reduce異常的慢捧杉,從而導(dǎo)致這個任務(wù)不能結(jié)束陕见,也有可能會OOM 2)秘血、如果reduce太多: 產(chǎn)生的小文件太多,合并起來代價太高评甜,namenode的內(nèi)存占用也會增大灰粮。如果我們不指定mapred.reduce.tasks,hive會自動計算需要多少個reducer忍坷。計算的公式: reduce個數(shù) = InputFileSize / bytes per reducer 3)粘舟、估算reducer的個數(shù),及計算公式:注意最重要的一句話:int reducers = (int)((totalInputFileSize +bytesPerReducer - 1) / bytesPerReducer)) 生成的文件個數(shù)佩研。設(shè)置reduce個數(shù) mapred.reduce.tasks=50; insert into table xxx select * from xxx distribute by rand();備注: 設(shè)置的參數(shù)是生成的文件個數(shù)柑肴,distribute by rand()保證數(shù)據(jù)隨機分配到50個文件中。
輸出合并小文件 hive.merge.mapredfiles = true 正常的map-reduce job后旬薯,是否啟動merge job來合并reduce端輸出的結(jié)果晰骑,建議開啟
hive.merge.mapfiles = true; 正常的map-only job后,是否啟動merge job來合并map端輸出的結(jié)果
hive.merge.size.per.task = X; 合并后文件的大小
hive.merge.smallfiles.avgsize=X; 當(dāng)輸出文件平均大小小于該值绊序,啟動新job合并文件 -1
輸出壓縮 mapred.output.compress=true; 壓縮輸出
hive.exec.compress.output=true; 為最終輸出結(jié)果啟用壓縮
mapred.output.compression.codec=com.hadoop.compression.lzo.LzopCodec; 輸出所用的壓縮codec 常見的壓縮格式:DEFLATE org.apache.hadoop.io.compress.DefaultCodec gzip org.apache.hadoop.io.compress.GzipCodec bzip org.apache.hadoop.io.compress.BZip2Codec Snappy org.apache.hadoop.io.compress.SnappyCodec org.apache.hadoop.io.compress.DefaultCodec
mapred.output.compression.type=BLOCK; 控制限制使用壓縮格式,默認值為RECORD, 即對每一條記錄進行壓縮, 如果將其改為BLOCK,將針對一組記錄進行壓縮SqeuenceFile的輸出可以使用的壓縮類型:NONE,RECORD,BLOCK RECORD
中間過程壓縮 hive.exec.compress.intermediate=true; 為map中間輸出啟用壓縮硕舆。
mapred.map.output.compression.codec=com.hadoop.compression.lzo.LzoCodec; 一般對于中間輸出壓縮采用低壓縮比,高壓縮解壓縮速度的壓縮算法骤公,如LZO,Snappy org.apache.hadoop.io.compress.DefaultCodec
hive.intermediate.compression.type=BLOCK; RECORD
動態(tài)分區(qū) hive.exec.max.created.files=100000; 動態(tài)分區(qū)屬性,全局可以創(chuàng)建的最大文件個數(shù) 100000
hive.exec.dynamic.partition.mode = nonstrict; 動態(tài)分區(qū)的模式岗宣,默認strict,表示必須指定至少一個分區(qū)為靜態(tài)分區(qū)淋样,nonstrict模式表示允許所有的分區(qū)字段都可以使用動態(tài)分區(qū)耗式。一般需要設(shè)置為nonstrict strict
hive.exec.dynamic.partition = true; 是否開啟動態(tài)分區(qū)功能,默認false關(guān)閉趁猴。使用動態(tài)分區(qū)時候刊咳,該參數(shù)必須設(shè)置成true; FALSE
hive.exec.max.dynamic.partitions.pernode 在每個執(zhí)行MR的節(jié)點上,最大可以創(chuàng)建多少個動態(tài)分區(qū)儡司。該參數(shù)需要根據(jù)實際的數(shù)據(jù)來設(shè)定娱挨。比如:源數(shù)據(jù)中包含了一年的數(shù)據(jù),即day字段有365個值捕犬,那么該參數(shù)就需要設(shè)置成大于365跷坝,如果使用默認值100,則會報錯碉碉。 100
hive.exec.max.dynamic.partitions 在所有執(zhí)行MR的節(jié)點上柴钻,最大一共可以創(chuàng)建多少個動態(tài)分區(qū)。
hive.error.on.empty.partition 當(dāng)有空分區(qū)生成時垢粮,是否拋出異常贴届。一般不需要設(shè)置。 FALSE
groupby負載均衡 hive.groupby.skewindata=true; 負載均衡(一般不建議使用,會有丟數(shù)據(jù)的風(fēng)險)數(shù)據(jù)傾斜時負載均衡毫蚓,當(dāng)選項設(shè)定為true占键,生成的查詢計劃會有兩個MRJob。第一個MRJob 中元潘,Map的輸出結(jié)果集合會隨機分布到Reduce中畔乙,每個Reduce做部分聚合操作,并輸出結(jié)果翩概,這樣處理的結(jié)果是相同的GroupBy Key有可能被分發(fā)到不同的Reduce中啸澡,從而達到負載均衡的目的;第二個MRJob再根據(jù)預(yù)處理的數(shù)據(jù)結(jié)果按照GroupBy Key分布到Reduce中(這個過程可以保證相同的GroupBy Key被分布到同一個Reduce中)氮帐,最后完成最終的聚合操作嗅虏。
hive.groupby.mapaggr.checkinterval=100000; group的鍵對應(yīng)的記錄條數(shù)超過這個值則會進行分拆,值根據(jù)具體數(shù)據(jù)量設(shè)置
查看 hive.stats.dbclass=counter; 存儲臨時Hive統(tǒng)計信息的方式
dfs.block.size; 查看集群設(shè)置的文件塊大小,不能修改上沐,值為134217728皮服,即128mb。
io.compression.codecs; 查看集群的支持的壓縮算法.org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.BZip2Codec,com.hadoop.compression.lzo.LzoCodec,com.hadoop.compression.lzo.LzopCodec,org.apache.hadoop.io.compress.SnappyCodec
數(shù)據(jù)傾斜優(yōu)化 hive.auto.convert.join=true /+mAPJOIN(小表名)/ 小表加載到內(nèi)存中参咙,表的JOIN操作是在Map端且在內(nèi)存進行的 FALSE 大表 join 小表
hive.optimize.skewjoin=true join過程出現(xiàn)傾斜則優(yōu)化
hive.skewjoin.key=1000000 join的鍵對應(yīng)的記錄條數(shù)超過這個值則會進行優(yōu)化
作業(yè) mapreduce.job.name 作業(yè)名稱
mapreduce.job.priority 作業(yè)優(yōu)先級龄广,VERY_HIGH,HIGH,NORMAL,LOW,VERY_LOW NORMAL
MR ApplicationMaster設(shè)置 yarn.app.mapreduce.am.resource.mb MR ApplicationMaster占用的內(nèi)存量 1536
yarn.app.mapreduce.am.resource.cpu-vcores MR ApplicationMaster占用的虛擬CPU個數(shù) 1
mapreduce.am.max-attempts MR ApplicationMaster最大失敗嘗試次數(shù) 2
Map Task mapreduce.map.memory.mb 每個Map Task需要的內(nèi)存量 1024 MAP YARN 申請內(nèi)存 4096
mapreduce.map.cpu.vcores 每個Map Task需要的虛擬CPU個數(shù) 1
mapreduce.map.maxattempts Map Task最大失敗嘗試次數(shù) 4
Reduce Task mapreduce.reduce.memory.mb 每個Reduce Task需要的內(nèi)存量 1024 REDUCE YARN 申請內(nèi)存
mapreduce.reduce.cpu.vcores 每個Reduce Task需要的虛擬CPU個數(shù) 1
mapreduce.reduce.maxattempts Reduce Task最大失敗嘗試次數(shù) 4
mapreduce.map.speculative 是否對Map Task啟用推測執(zhí)行機制 FALSE
mapreduce.reduce.speculative 是否對Reduce Task啟用推測執(zhí)行機制 FALSE
mapreduce.map.sort.spill.percent Map階段溢寫文件的閾值(排序緩沖區(qū)大小的百分比) 0.8
mapreduce.reduce.shuffle.parallelcopies Reduce Task啟動的并發(fā)拷貝數(shù)據(jù)的線程數(shù)目 5
隊列 mapreduce.job.queuename 作業(yè)提交到的隊列 default
io mapreduce.task.io.sort.mb 任務(wù)內(nèi)部排序緩沖區(qū)大小 100
io.sort.mb = X; map輸出緩沖區(qū)大小 100
io.sort.factor = X; map端或reduce端排序文件時,每次對多合并流數(shù),默認值為10 10
yarn yarn.app.mapreduce.am.command-opts=-Xmx8192m beyond virtual memory limits
yarn.app.mapreduce.am.resource.mb=9216
JVM mapreduce.map.java.opts=-Xmx3572M; 一般 JVM 參數(shù)可以是 Yarn 申請內(nèi)存的 80%, 如果 都比較大蕴侧,可以酌情 MAP JVM 內(nèi)存
mapreduce.reduce.java.opts=-Xmx4096M; REDUCE JVM 內(nèi)存
yarn.app.mapreduce.am.resource.mb=2000; AM YARN 申請內(nèi)存
yarn.app.mapreduce.am.command-opts=-Xmx1524m; AM JVM 內(nèi)存
矢量查詢(Vectorized query) hive.vectorized.execution.enabled = true; 每次處理數(shù)據(jù)時會將1024行數(shù)據(jù)組成一個batch進行處理择同,而不是一行一行進行處理,這樣能夠顯著提高執(zhí)行速度净宵。
hive.vectorized.execution.reduce.enabled = true;
TEZ hive.execution.engine=tez; Tez 是一個開源的支持DAG作業(yè)的計算框架敲才,它來源于MapReduce框架。
set hive.mapjoin.hybridgrace.hashtable=false Hive2.1.0的版本有一個BUG择葡。使用Tez的時候需要設(shè)置
COST BASED QUERY OPTIMIZATION set hive.cbo.enable=true; COST BASED QUERY OPTIMIZATION可以優(yōu)化hive的每次查詢紧武。如果我們想要使用CBO,需要通過HIVE的分析模式來收集表的不同統(tǒng)計數(shù)據(jù)敏储,我們可以通過下面的命令來進行:analyze table tweets compute statistics for columns;
set hive.compute.query.using.stats=true;
set hive.stats.fetch.column.stats=true;
set hive.stats.fetch.partition.stats=true;

資料:
https://zh.hortonworks.com/blog/5-ways-make-hive-queries-run-faster/
Hive官網(wǎng):https://cwiki.apache.org/confluence/display/Hive/AdminManual+Configuration
Hadoop官網(wǎng):http://hadoop.apache.org/docs/current/
set -v; 查看hive的所有默認配置阻星。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市已添,隨后出現(xiàn)的幾起案子妥箕,更是在濱河造成了極大的恐慌,老刑警劉巖更舞,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件畦幢,死亡現(xiàn)場離奇詭異,居然都是意外死亡疏哗,警方通過查閱死者的電腦和手機呛讲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進店門禾怠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來返奉,“玉大人贝搁,你說我怎么就攤上這事⊙科” “怎么了雷逆?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長污尉。 經(jīng)常有香客問我膀哲,道長,這世上最難降的妖魔是什么被碗? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任某宪,我火速辦了婚禮,結(jié)果婚禮上锐朴,老公的妹妹穿的比我還像新娘兴喂。我一直安慰自己,他們只是感情好焚志,可當(dāng)我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布衣迷。 她就那樣靜靜地躺著,像睡著了一般酱酬。 火紅的嫁衣襯著肌膚如雪壶谒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天膳沽,我揣著相機與錄音汗菜,去河邊找鬼。 笑死挑社,一個胖子當(dāng)著我的面吹牛呵俏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播滔灶,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼普碎,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了录平?” 一聲冷哼從身側(cè)響起麻车,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎斗这,沒想到半個月后动猬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡表箭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年赁咙,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡彼水,死狀恐怖崔拥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情凤覆,我是刑警寧澤链瓦,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站盯桦,受9級特大地震影響慈俯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜拥峦,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一贴膘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧略号,春花似錦刑峡、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至随闪,卻和暖如春阳似,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背铐伴。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工撮奏, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人当宴。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓畜吊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親户矢。 傳聞我的和親對象是個殘疾皇子玲献,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容