HIve,Spark效能優化

2021-09-27 08:08:06 字數 2863 閱讀 6815

hive 效能優化

一:map階段的優化:主要是控制hive任務中的map數量,確定合適的map數,以及每個map處理的合適的資料量

1.適當減少map數的情況:當任務中有許多的小檔案,產生很多map,乙個map任務的啟動時間和初始化時間遠遠大於邏輯處理的事件,造成資源的浪費。

合併方法如下:

set mapred.max.split.size=100000000;//(100m)

set mapred.min.split.size.per.node=100000000;

set mapred.min.split.size.per.rack=100000000;

set hive.input.format=org.apache.hadoop.hive.ql.io.combinehiveinputformat;//表示執行前進行小檔案合併。

//大於128:按照128m分割;100~128按照100分;小於100的進行合併。

2.適當增加map數的情況:當有乙個小於128m的檔案有上百萬的資料,欄位少而且資料單位小,處理的邏輯業務比較複雜,有乙個map任務去做,耗時比較大。

set mapred.reduce.tasks=10;

create table a_1 as

select * from a distribute by rand();

//表示通過設定map任務數來中加map,把a表中的資料均勻的放到a_1目錄下10個檔案中。

3.map端的聚合:

set  hive.map.aggr=true ;(預設為true)
二:reduce階段的優化

1.指定reduce的數量

set mapred.reduce.tasks=10
未指定reduce數量

param1:hive.exec.reducers.bytes.per.reducer(預設為1000^3)

param2:hive.exec.reducers.max(預設為999)

reducenum = min(param2,總輸入資料量/param1(reducenum = inputfilesize / bytes per reducer))

因為map階段的輸出結果比輸入結果減少很多,所以即使不設定reducer的個數,重設引數2還是很有必要的。可以將引數2設定為0.95*(集群中tasktracker個數)

其他詳解:

spark 效能優化

包括執行前的資源引數設定調優,資料傾斜的解決,記憶體溢位,shuffle的調優,

一:引數優化部分

1.spark.driver.memory (default 1g) 增加driver的記憶體

sparkcontext,dagscheduler都是執行在driver端的。對應rdd的stage切分也是在driver端執行,如果使用者自己寫的程式有過多的步驟,切分出過多的stage,這部分資訊消耗的是driver的記憶體,這個時候就需要調大driver的記憶體

2.spark.rdd.compress (default false) 開啟rdd的壓縮

這個引數在記憶體吃緊的時候,又需要persist資料有良好的效能,就可以設定這個引數為true,這樣在使用persist(storagelevel.memory_only_ser)的時候,就能夠壓縮記憶體中的rdd資料。減少記憶體消耗,就是在使用的時候會占用cpu的解壓時間。

3.選擇spark的序列化方式

4.spark.speculation (default false)

乙個大的集群中,每個節點的效能會有差異,spark.speculation這個引數表示空閒的資源節點會不會嘗試執行還在執行,並且執行時間過長的task,避免單個節點執行速度過慢導致整個任務卡在乙個節點上。這個引數最好設定為true。與之相配合可以一起設定的引數有spark.speculation.×開頭的引數。參考中有文章詳細說明這個引數。

二: 資料傾斜(略)

三:spark 記憶體溢位:主要有map階段中記憶體溢位,shuffle後記憶體溢位

1.map過程產生大量物件導致記憶體溢位

如:

rdd.map(x=>for(i <- 1 to 10000) yield i.tostring)  可以調整為rdd.repartition(10000).map(x=>for(i <- 1 to 10000) yield i.tostring)
2.資料不平衡導致記憶體溢位

解決方案就是同上呼叫repartition重新分割槽

3.shuffle後記憶體溢位

解決方案 預設是hashpatitioner,預設值是父rdd中最大的分割槽數,這個引數通過spark.default.parallelism控制(,只對hashpatitioner有用。如果是自己實現的partitoner則需要自己在實現的**中更改partitioner的數量。

4.共用物件能減少oom的情況。

具體詳見:

四:shuffle調優

1.spark.shuffle.file.buffer

2.spark.reducer.maxsizeinflight

3.spark.shuffle.io.maxretries

4.spark.shuffle.io.retrywait

5.spark.shuffle.memoryfraction

6.spark.shuffle.manager

7.spark.shuffle.sort.bypassmergethreshold

8.spark.shuffle.consolidatefiles

mapreduce 記憶體溢位:

reducer的預設對記憶體大小是200m,可以通過

Hive Spark優化案例

一.join原則 二.控制map數量 例 input目錄下有乙個檔案a,大小780m。分成7塊 6 128 12m 產生七個map 減少map 合併小檔案 對資料來源來講 增加map 控制上乙個job的reducer數 三.設定合理的reducer個數 reducer過少 執行效率低 四.注意事項 ...

mysql效能優化 mysql效能優化

優化方式 1.空間換時間 冗餘 2.時間換空間 字段優先使用型別 int date char varchar text 索引型別 btree索引 hash索引 索引的葉子下,存放乙個資訊指向所在行的資料位址。btree有利於範圍查詢,hash有利於精確查詢。btree用的更多一些。btree索引的常...

效能優化 電量優化

使用battery historian來監測電量的情況,battery historian時google的乙個開源專案 具體安裝過程參見 當出現下列畫面,說明已經開啟 其開啟成功以後,訪問網頁如下所示 說明 這裡使用的是一台國外的vps伺服器,原本是想在本地虛擬機器實驗的,一直連線超時,就換成了vp...