常見Hive調(diào)優(yōu)策略

Hive是否執(zhí)行mapreduce

因?yàn)橛行﹕ql語(yǔ)句是不需要走mapreduce的。比如:select *、limit。

#在配置文件中hive-site.xml設(shè)置
<name>hive.fetch.task.conversion</name>
<value>more</value>

Hive表創(chuàng)建的調(diào)優(yōu)

  1. 是否創(chuàng)建分區(qū)表。(加快查詢速率)
  2. 是否創(chuàng)建外部表。(多個(gè)部門使用時(shí)可以保證表的安全)
  3. 選擇什么樣的存儲(chǔ)格式。(textFile,ORCFile,Parquet)
    • textFile:行存儲(chǔ)格式
    • ORCFile:列存儲(chǔ)格式(但是數(shù)據(jù)量太大,會(huì)被分會(huì)多個(gè)塊)
    • Parquet:行存儲(chǔ)格式,但是壓縮性能更好

Hive中JOIN語(yǔ)句的調(diào)優(yōu)

首先需要知道默認(rèn)情況下,join操作是在reduce端進(jìn)行的,因?yàn)橥ǔG闆r下,要連接的表中的數(shù)據(jù)會(huì)分布在不同的map中處理,這樣造成了即使同一個(gè)key對(duì)應(yīng)的value可能存在不同的map中,所以必須要等到reduce中去連接。

  1. map join
    在有一個(gè)表為小表的情況下,可以把小表所有數(shù)據(jù)一次性讀到每個(gè)map節(jié)點(diǎn)的內(nèi)存中,然后進(jìn)行join關(guān)聯(lián)操作。這樣省去了reduce操作運(yùn)行的效率也會(huì)高很多。

數(shù)據(jù)傾斜

  1. 引起數(shù)據(jù)傾斜的操作
    • Join,group by
  2. 本質(zhì)原因
    key值分布不均勻,導(dǎo)致某些reduce的處理的數(shù)據(jù)量遠(yuǎn)遠(yuǎn)大于平均值。
  3. 表現(xiàn)
    任務(wù)進(jìn)度長(zhǎng)時(shí)間保持在一個(gè)值,查看監(jiān)控頁(yè)面的時(shí)候,發(fā)現(xiàn)只有一個(gè)或幾個(gè)reduce子任務(wù)未完成。
  4. 解決方式
    • 大小表join:用map join,在map端完成join
    • 大大表join:對(duì)空值的key變成一個(gè)隨機(jī)字符串,這樣相同的空值key就分不到了不同的reduce中。
    • 講傾斜的數(shù)據(jù)提出出來單獨(dú)處理,最后union回去。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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