Hive優化--定位調優指導

1.1.    日誌蒐集

1.1.1.   HiveServer日誌獲取

Hive調優需要看HiveServer的運行日誌及GC日誌。

HiveServer日誌路徑爲:HiveServer節點的/var/log/Bigdata/hive/hiveserver/

文件名

日誌內容

hive.log

HiveServer運行日誌

hive-omm-gc.log.0.current

HiveServer GC日誌



 

1.1.1.   MapReduce日誌查看

    Hive提交的MapReduce的日誌中詳細地記錄了map和reduce任務的運行情況。

通過Yarn原生界面可以查看,如下:

 

1.2.    定位調優思路

第一步,分析SQL待處理的表及文件,統計待處理的表的文件數、數據量、條數、文件格式、壓縮格式,分析是否有更適合的文件存儲格式、壓縮格式,是否能夠使用上分區或分桶,是否有大量小文件需要map前合併。如果有優化空間,則執行優化。

第二步,分析SQL的結構,是否有重複的子查詢可以存到中間表,是否可以使用相關性優化器,是否出現笛卡爾積需要去除,是否可以使用Multiple Insert語句,是否使用了低性能的UDF或SerDe需要替換。如果有優化空間,則執行優化。

第三步,分析SQL的操作,是否可利用MapJoin,是否可使用SMB Join,是否需要設置map端聚合,是否需要優化count(distinct),是否全局排序可以使用局部排序代替,是否可以使用向量化優化、基於代價的優化等優化器。如果有優化空間,則執行優化。

第四步,觀察SQL啓動的MR運行情況,如果map運行緩慢,考慮減小Map處理的最大數據量提高併發度,考慮增大map的內存和虛擬核數;如果是reduce運行緩慢,是否有group by傾斜需要解決,是否有join傾斜需要處理,當大量重複數據做去重時減少Reduce數量,當大量匹配記錄做關聯時增加Reduce數量。

 

1.3.    常見問題處理

1.3.1.   OOM(內存溢出)

1.3.1.1.      問題描述

HiveServer運行日誌及MR日誌報以下錯誤:

Container [pid=48338,containerID=container_1417574466181_3484_01_000043] is running beyond physical memory limits. Current usage:1.0 GB of 1 GB physical memory used; 2.0 GB of 2.1 GB virtual memory used. Killing container. Dump of the process-tree for container_1417574466181_3484_01_000043 : |- PID PPID PGRPID SESSID CMD_NAME USER_MODE_TIME(MILLIS) SYSTEM_TIME(MILLIS) VMEM_USAGE(BYTES) RSSMEM_USAGE(PAGES) FULL_CMD_LINE |- 48345 48338 48338 48338 (java) 2432 61 2062110720 272981

 

1.3.1.2.      解決方案

從日誌可以看出,Container物理內存不夠用了,觀察YARN界面該container是map還是reduce。

如果是map,則增大mapreduce.map.memory.mb的設置,如設置成6144(默認值爲4096),但不能超過yarn.scheduler.maximum-allocation-mb的值。

如果是reduce,則增大mapreduce.reduce.memory.mb的設置,如設置成6144(默認值爲4096),但不能超過yarn.scheduler.maximum-allocation-mb的值。

 



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章