Hive優(yōu)化

hive.optimize.cp=true:列裁剪

hive.optimize.prunner:分區(qū)裁剪

hive.limit.optimize.enable=true:優(yōu)化LIMIT n語句

hive.limit.row.max.size=1000000:

hive.limit.optimize.limit.file=10:最大文件數(shù)

1. 本地模式(小任務):

需要滿足以下條件:

1.job的輸入數(shù)據(jù)大小必須小于參數(shù):hive.exec.mode.local.auto.inputbytes.max(默認128MB)

2.job的map數(shù)必須小于參數(shù):hive.exec.mode.local.auto.tasks.max(默認4)

3.job的reduce數(shù)必須為0或者1

hive.exec.mode.local.auto.inputbytes.max=134217728

hive.exec.mode.local.auto.tasks.max=4

hive.exec.mode.local.auto=true

hive.mapred.local.mem:本地模式啟動的JVM內(nèi)存大小

2. 并發(fā)執(zhí)行:

hive.exec.parallel=true 线梗,默認為false

hive.exec.parallel.thread.number=8

3.Strict Mode:

hive.mapred.mode=true,嚴格模式不允許執(zhí)行以下查詢:

分區(qū)表上沒有指定了分區(qū)

沒有l(wèi)imit限制的order by語句

笛卡爾積:JOIN時沒有ON語句

4.動態(tài)分區(qū):

hive.exec.dynamic.partition.mode=strict:該模式下必須指定一個靜態(tài)分區(qū)

hive.exec.max.dynamic.partitions=1000

hive.exec.max.dynamic.partitions.pernode=100:在每一個mapper/reducer節(jié)點允許創(chuàng)建的最大分區(qū)數(shù)

DATANODE:dfs.datanode.max.xceivers=8192:允許DATANODE打開多少個文件

5.推測執(zhí)行:

mapred.map.tasks.speculative.execution=true

mapred.reduce.tasks.speculative.execution=true

hive.mapred.reduce.tasks.speculative.execution=true;

6.Single MapReduce MultiGROUP BY

hive.multigroupby.singlemar=true:當多個GROUP BY語句有相同的分組列抢呆,則會優(yōu)化為一個MR任務

7. hive.exec.rowoffset:是否提供虛擬列

8. 分組

兩個聚集函數(shù)不能有不同的DISTINCT列,以下表達式是錯誤的:

INSERT OVERWRITE TABLE pv_gender_agg SELECT pv_users.gender, count(DISTINCT pv_users.userid), count(DISTINCT pv_users.ip) FROM pv_users GROUP BY pv_users.gender;

SELECT語句中只能有GROUP BY的列或者聚集函數(shù)宝泵。

9.

hive.map.aggr=true;在map中會做部分聚集操作,效率更高但需要更多的內(nèi)存。

hive.groupby.mapaggr.checkinterval:在Map端進行聚合操作的條目數(shù)目

10.

hive.groupby.skewindata=true:數(shù)據(jù)傾斜時負載均衡瓤鼻,當選項設(shè)定為true,生成的查詢計劃會有兩個MRJob。第一個MRJob 中沃粗,

Map的輸出結(jié)果集合會隨機分布到Reduce中,每個Reduce做部分聚合操作,并輸出結(jié)果盼产,這樣處理的結(jié)果是相同的GroupBy Key

有可能被分發(fā)到不同的Reduce中草穆,從而達到負載均衡的目的;第二個MRJob再根據(jù)預處理的數(shù)據(jù)結(jié)果按照GroupBy Key分布到

Reduce中(這個過程可以保證相同的GroupBy Key被分布到同一個Reduce中)段标,最后完成最終的聚合操作瞻赶。

11.Multi-Group-By Inserts:

FROM test

INSERT OVERWRITE TABLE count1

SELECT count(DISTINCT test.dqcode)

GROUP BY test.zipcode

INSERT OVERWRITE TABLE count2

SELECT count(DISTINCT test.dqcode)

GROUP BY test.sfcode;

12.排序

ORDER BY colName ASC/DESC

hive.mapred.mode=strict時需要跟limit子句

hive.mapred.mode=nonstrict時使用單個reduce完成排序

SORT BY colName ASC/DESC :每個reduce內(nèi)排序

DISTRIBUTE BY(子查詢情況下使用 ):控制特定行應該到哪個reducer痹兜,并不保證reduce內(nèi)數(shù)據(jù)的順序

CLUSTER BY :當SORT BY 对湃、DISTRIBUTE BY使用相同的列時。

13.合并小文件

hive.merg.mapfiles=true:合并map輸出

hive.merge.mapredfiles=false:合并reduce輸出

hive.merge.size.per.task=256*1000*1000:合并文件的大小

hive.mergejob.maponly=true:如果支持CombineHiveInputFormat則生成只有Map的任務執(zhí)行merge

hive.merge.smallfiles.avgsize=16000000:文件的平均大小小于該值時遗淳,會啟動一個MR任務執(zhí)行merge。

14.map/reduce數(shù)目

減少map數(shù)目:

set mapred.max.split.size

set mapred.min.split.size

set mapred.min.split.size.per.node

set mapred.min.split.size.per.rack

set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat

增加map數(shù)目:

當input的文件都很大拆讯,任務邏輯復雜种呐,map執(zhí)行非常慢的時候阔墩,可以考慮增加Map數(shù),來使得每個map處理的數(shù)據(jù)量減少柑土,從而提高任務的執(zhí)行效率蜀肘。

假設(shè)有這樣一個任務:

select data_desc, count(1), count(distinct id),sum(case when …),sum(case when ...),sum(…) from a group by data_desc

如果表a只有一個文件,大小為120M稽屏,但包含幾千萬的記錄,如果用1個map去完成這個任務获雕,肯定是比較耗時的薄腻,這種情況下,我們要考慮將這一個文件合理的拆分成多個届案,這樣就可以用多個map任務去完成庵楷。

set mapred.reduce.tasks=10;

create table a_1 as select * from a distribute by rand(123);

這樣會將a表的記錄,隨機的分散到包含10個文件的a_1表中楣颠,再用a_1代替上面sql中的a表尽纽,則會用10個map任務去完成。每個map任務處理大于12M(幾百萬記錄)的數(shù)據(jù)童漩,效率肯定會好很多弄贿。

reduce數(shù)目設(shè)置:

參數(shù)1:hive.exec.reducers.bytes.per.reducer=1G:每個reduce任務處理的數(shù)據(jù)量

參數(shù)2:hive.exec.reducers.max=999(0.95*TaskTracker數(shù)):每個任務最大的reduce數(shù)目

reducer數(shù)=min(參數(shù)2,總輸入數(shù)據(jù)量/參數(shù)1)

set mapred.reduce.tasks:每個任務默認的reduce數(shù)目。典型為0.99*reduce槽數(shù)矫膨,hive將其設(shè)置為-1差凹,自動確定reduce數(shù)目。

15.使用索引:

hive.optimize.index.filter:自動使用索引

hive.optimize.index.groupby:使用聚合索引優(yōu)化GROUP BY操作

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末侧馅,一起剝皮案震驚了整個濱河市危尿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌馁痴,老刑警劉巖谊娇,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異弥搞,居然都是意外死亡邮绿,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門攀例,熙熙樓的掌柜王于貴愁眉苦臉地迎上來船逮,“玉大人,你說我怎么就攤上這事粤铭⊥谖福” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長酱鸭。 經(jīng)常有香客問我吗垮,道長,這世上最難降的妖魔是什么凹髓? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任烁登,我火速辦了婚禮,結(jié)果婚禮上蔚舀,老公的妹妹穿的比我還像新娘饵沧。我一直安慰自己,他們只是感情好赌躺,可當我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布狼牺。 她就那樣靜靜地躺著,像睡著了一般礼患。 火紅的嫁衣襯著肌膚如雪是钥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天缅叠,我揣著相機與錄音悄泥,去河邊找鬼。 笑死痪署,一個胖子當著我的面吹牛码泞,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播狼犯,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼余寥,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了悯森?” 一聲冷哼從身側(cè)響起宋舷,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瓢姻,沒想到半個月后祝蝠,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡幻碱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年绎狭,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片褥傍。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡儡嘶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出恍风,到底是詐尸還是另有隱情蹦狂,我是刑警寧澤誓篱,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站凯楔,受9級特大地震影響窜骄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜摆屯,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一邻遏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鸥拧,春花似錦党远、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽氛驮。三九已至腕柜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間矫废,已是汗流浹背盏缤。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蓖扑,地道東北人唉铜。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像律杠,于是被迫代替她去往敵國和親潭流。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,941評論 2 355

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