1. 程式人生 > >《hive程式設計指南》閱讀筆記摘要(九)

《hive程式設計指南》閱讀筆記摘要(九)

第10章 調優
一個hive任務會包含有一個或多個階段stage,不同的stage間有依賴關係

一、分析複雜的或者執行效率低的查詢時,可以使用explain語句,如
explain select .....;

二、explain extended可以產生更多的輸出資訊
explain extended select ......;

三、優化limit:對輸出結果有影響,慎用

四、join優化:參看第六章

五、本地模式:有時候,啟動一個hadoop job的時間比執行job的時間還要多。對於小資料集,可以執行本地模式來執行job
設定以下屬性,可以讓hive在適當的時侯啟用這個優化:
set mapred.job.tracker=local;
set mapred.tmp.dir=/home/edward/tmp;

六、並行執行:預設情況下,hive一次只會執行一個stage。要加快執行速度,可以啟動並行執行,讓沒有依賴關係的stage併發執行。
set hive.exec.parallel=true;

七、嚴格模式:可以禁止三種類型的查詢
set hive.mapred.mode=true
1、查詢分割槽表時,where子句中必須含有分割槽欄位的過濾條件;
2、使用了order by語句的查詢,必須使用limit語句;
3、限制笛卡爾積的查詢;


八、調整mapper和reducer的個數
hive是按照輸入的資料量大小來確定reducer個數的。
dfs -count類似linux的du -s ,可以計算指定目錄下所有資料的總大小
hadoop dfs -count /user/media6/fracture/ins/*

每個reducer處理的輸入資料量是hive.exec.reducers.bytes.per.reducer預設值是1GB
hive的reducer個數mapred.reduce.tasks,預設是3
在共享叢集上處理任務,需要控制資源利用情況:hive.exec.reducers.max可以控制一個job消耗的reducer資源。

九、JVM重用
mapreduce的調優引數:mapred.job.reuse.jvm.num.tasks,每個jvm執行多少個task,-1表示不限制
適用場景:有很多小檔案或task特別多的場景
缺點:開啟這個屬性後,會一直佔用task插槽,以便進行重用,直到任務完成才會釋放。如果一個不平衡的job裡有幾個reduce task比別的reduce task執行時間多得多,那麼保留的插槽會一直空閒者不能被其他job使用,直到所有task都結束才會釋放。

十、索引
見第八章

十一、動態分割槽調整
見第五章
涉及到的屬性包括
嚴格模式
hive.exec.dynamic.partition.mode=strict
hive允許一次建立的動態分割槽的數量,預設1000
hive.exec.max.dynamic.partitions=2000
每一個mapreduce節點上可以建立的動態分割槽最大數
hive.exec.max.dynamic.partitions.pernode=10000    
在datanode上,一次可以開啟的檔案數量,預設256
dfs.datanode.max.xcievers=8192


十二、推測執行
推測執行是hadoop的一個功能,通過(加快獲取單個task的結果)(以及進行偵測將執行慢的tasktracker加入到黑名單)來提高整體的任務執行效率。

十三、三個mapreduce中多個group by
將查詢中的多個group by操作組裝到單個mapreduce任務中
hive.multigroupby.singlemr=false

十四、虛擬列

*****************************
微信公眾號:IT人成長關注
大資料技術QQ群:485681776