4. 小結
hive的底層是mapreduce,當資料量太大時,往往可以通過並行來提高效率,比如通過partition實現執行多個reduce,可是如果處理不當則容易引發資料傾斜,從而導致效率降低,這就涉及hive的優化。hive的優化主要分為mapreduce優化、·配置優化和程式優化。
hql解析之後會成為mapreduce程式,所以可以從mapreduce執行的角度來考慮效能優化。
首先考慮的是要避免資料傾斜。在處理大批量資料時,可以通過partition分割槽將資料分發到不同的reduce中進行處理,可是如果分配不當,則可能造成某個reduce中處理千萬條資料,有的reduce中只處理幾十條資料,這就造成了資料傾斜。
另外,應當盡量避免大量的job,因為job數較多的作業往往執行效率比較低。比如有十幾張表,並多次關聯,則可能會產生十幾個甚至幾十個job,而job的初始化等操作都是比較耗費資源的,在這種情況下會造成效能低下。
列裁剪的意思是忽略不需要的列,hive在讀取資料的時候,可以僅僅讀取需要用到的列,而不需要把所有的列都讀取出來。
另外乙個引數優化的方式是在查詢過程中減少不必要的分割槽,分割槽引數為:hive.optimize.pruner=true (預設值為真)。
在寫join操作的**時,最好將數目少的表或者子查詢放在join操作符的左邊,主要原因是在reduce階段,處在join左邊的表內容會被載入進記憶體中。同時,對於乙個key來說,對應的value值小的放在前面,value值大的放在後面,這也是」小表放前「原則。map端部分聚合
由於並不是所有的聚合操作都必須要在reduce端進行,很多聚合操作可以先在map端進行聚合,接著在reduce端得出最終結果。這時需要修改的引數是hive.map.aggr=true,這個引數用於設定是否需要在map端進行聚合。另外乙個引數是hive.groupby.mapaggr.checkinterval,用於設定map端進行聚合操作的條目數。在有資料傾斜時進行負載均衡
相關引數:hive.groupby.skewindata,當設定為true時,生成的查詢計畫會有兩個mapreduce任務。其中,第乙個mapreduce任務中,map的輸出結果會被隨機分布到reduce中,接著每個reduce做部分聚合操作,並輸出結果。hive的操作有很多,,但是就到這裡吧,有時間再回頭深究。。
Hive 筆記五 hive的優化
本地模式 嚴格模式 jvm重用 並行執行 推測還行 合併小檔案 fetch模式 1.列裁剪和分割槽裁剪 列裁剪是在查詢時只讀取需要的列 分割槽裁剪就是只讀取需要的分割槽。2.sort by代替 order by 3.group by 代替count distinct 1 common join 普通...
hive的效能優化
計算資料優化主要有兩種思路,一種是減少處理資料量 一種是解決資料傾斜。資料傾斜一般可以分為三種 join階段資料傾斜 reduce階段資料傾斜 主要有兩種方式 1.2 join階段資料傾斜 是最常見的資料傾斜,按照表的大小和join方式的不同分別有多種處理方式。1.2.1 mapjoin 作用 適用...
hive的學習 優化
一.表連線 1.將大表放後頭 hive假定查詢中最後的乙個表是大表。它會將其它表快取起來,然後掃瞄最後那個表。因此通常需要將小表放前面,或者標記哪張表是大表 streamtable table name 否則會引起磁碟和記憶體的大量消耗。2.使用相同的連線鍵 當對3個或者更多個表進行join連線時,...