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...