Hive的一些優化方法

2021-10-07 04:33:53 字數 1329 閱讀 4416

在實際開發過程中我們要盡可能的對hive進行優化,來提高生產效率,在處理hive優化的時候我們必須把hive sql當做mapreducer來讀,從mr的執行角度來考慮優化效能,從更底層來思考如何優化運算效能。

分為以下幾個方面:

1.解決資料傾斜問題。

2.減少job數

3.合理設定map和reduce的task個數,能有效提公升效能。

4.對小檔案進行合併從而提高效率。

5,map階段的優化,主要就是確定合適的map數,通過調整資料的分割單元的大小mapred.max.split.size,減小max就可以增加map數。

6.reduce階段的優化主要就是選擇合適的reduce task的數量,可以從mapred.reduce.task引數設定從而指定reduce的個數。

需要注意:reduce的個數對於整個作業的效能有很大影響,如果reduce設定的過大,那麼將會產生很多小檔案,對namenode會產生一定的影響,從而整個作業的執行時間也未必會減少;如果reduce設定的過小,那麼單個reduce處理的資料會加大,很可能引起記憶體溢位問題

7.列剪裁:就是在hive讀取資料的時候,可以只讀取查詢中需要的列,從而忽略其他列,這樣做可以節省讀取開銷,中間表儲存開銷和資料整合開銷,引數為:hive.optimize.cp=true

8.分割槽剪裁:可以在查詢過程中減少讀取不必要的分割槽,分割槽剪裁引數:hive.optimize.pruner=true

9.map join操作問題:

如果一張表非常小,從而領一張表非常大的時候,我們就可以使用map端join,就是join在map端發生,不需要reduce,也就是不需要shuffle的過程,從而能在一定程度上節省資源,提高join效率。

10.groupby操作:有資料傾斜的時候需要進行負載均衡,此處需要設定:hive.groupby.skewindata,設定為true時,生成查詢計畫有兩個mapreduce任務。

(1)在第乙個mapreduce中,map的輸出結果集合會隨機分布到reduce中,而每個reduce都會做區域性聚合,並輸出結果,這個樣處理的結果是,相同groupby key 有可能有分發到不同的reduce中,從而達到負載均衡的目的;

(2)第二個 mapreduce 任務在根據預處理的資料按groupbykey分配到reduce中(這個過程可以保證相同的gruop by key 分布)到同乙個reduce中,最後完成最終的聚合操作。

11.合併小檔案:我們都知道檔案數目小,容易在檔案儲存端造成瓶頸,給hdfs帶來壓力,影響處理效率,對此,可以合併map和reduce的結果檔案來消除這樣的影響

設定引數屬性:合併map端檔案,合併reduce端輸出檔案

ps:如有不同見解或發現一些問題希望指出

ElasticSearch優化的一些方法

1.多執行緒程式插入,可以根據伺服器情況開啟多個執行緒index 速度可以提高n倍,n 2 2.如果有多台機器,可以以每台設定n個shards的方式,根據業務情況,可以考慮取消replias curl xput d 這裡設定20個shards,複製為0,如果需要replicas,可以完成index後...

ElasticSearch優化的一些方法

1.多執行緒程式插入,可以根據伺服器情況開啟多個執行緒index 速度可以提高n倍,n 2 2.如果有多台機器,可以以每台設定n個shards的方式,根據業務情況,可以考慮取消replias curl xput d 這裡設定20個shards,複製為0,如果需要replicas,可以完成index後...

ElasticSearch優化的一些方法

1.多執行緒程式插入,可以根據伺服器情況開啟多個執行緒index 速度可以提高n倍,n 2 2.如果有多台機器,可以以每台設定n個shards的方式,根據業務情況,可以考慮取消replias curl xput d 這裡設定20個shards,複製為0,如果需要replicas,可以完成index後...