大資料開發之調優

2022-03-23 08:38:41 字數 1903 閱讀 2352

1.1避免建立重複rdd

通常指,在開發spark作業中,首先基於某個資料來源,(如hive或hdfs檔案)建立乙個初始rdd,接著對這個rdd進行某個運算元操作,然後得到下乙個rdd,以此類推,迴圈往復,直到計算出我們需要的結果;在此過程中多個rdd會通過不同運算元操作串起來。這個rdd串 `rdd lineage` 也就是rdd的血緣關係鏈。

**在我們開發中注意,對於同乙份資料,只建立乙個rdd,不能建立多個rdd來代表同乙份據。

1.2盡可能復用同乙個rdd

1.我們除了在開發中避免對同乙份完全相同資料建立多個rdd之外,與此同時在資料執行運算元還要盡可能復用乙個rdd;

2.比如有乙個rdd資料格式為k-v型別,另乙個是單v型別,這兩個rdd的value資料完全一樣,那麼此時我們可以只使用k-v型別的那個rdd,因為其中已經包含了另乙個的資料,對於類似這種多個rdd有重疊或包含的情況,我們盡量復用乙個rdd,這樣可以減少運算元執行次數,也可以減少rdd的數量。

1.3對於多次使用rdd進行持久化

1.3.1概述

1.當我們在spark**中多次對乙個rdd做運算元操作後,就實現了spark作業的第一步優化,也即是盡可能復用rdd,此時就該在這個基礎之上進行第二步優化,

也就是保證對乙個rdd進行執行多次運算元操作時,這個rdd本身僅僅被計算一次。

2.spark中對於乙個rdd執行多次運算元的預設原理是這樣,每次你對乙個rdd執行乙個運算元操作時,都會重新從源頭計算一遍,計算出那個rdd來然後進行對這個rdd執行你的運算元操作,這種方式效能很差的。

3.因此對於這種情況,我們建議是對多次使用rdd進行持久化,此時spark會根據你的持久化策略,將rdd中資料儲存到記憶體或磁碟中,以後每次對這個rdd進行運算元操作時,都會直接從記憶體或磁碟中提取持久化的rdd資料,然後執行運算元,而不會從源頭重新計算一遍這個rdd,再執行運算元操作。

1.3.2持久化策略

1.3.3選擇合適的持久化策略

1.預設情況下,效能最高當然是memory_only,但是前提是你的記憶體足夠大,可以綽綽有餘存放整個rdd的所有資料因為不進行序列化和反序列化操作就避免了這部分的效能開銷;對這個rdd的後續運算元操作都是基於記憶體的資料操作,不需要從磁碟檔案中讀取資料,效能也很高,而且不需要複製乙份資料副本,並遠端傳送到其他節點上。但是這裡必須要注意的是實際的生產環境恐怕能夠直接用這種策略場景有限,如果rdd中資料比較多時,直接用這種持久化級別,會導致jvmdeoom記憶體溢位異常。

2.如果使用memory_onli級別時發生記憶體溢位,那麼建議嘗試使用memory_only_ser級別,該級別會將rdd資料序列化後再儲存記憶體中,此時每個partition僅僅是乙個位元組陣列而已,大大減少物件數量,並降低記憶體占用,這種級別比memory_only多出來效能開銷,主要就是序列化和反序列化的開銷,但後續運算元可以基於純記憶體進行操作,因此效能總體來說還是比較高的,此外可能發生的問題同上,如果rdd中數量過多的話,還是可能導致oom異常。

3.如果純記憶體級別都無法使用,而不memory

_and_disk策略,因為既然到了這一步就是說明rdd資料量大,記憶體無法完全放下,序列化後的資料比較少,可以節省記憶體和磁碟空間開銷,同時該策略會優先盡量資料比較少,可以節省記憶體和磁碟空間開銷,同時該策略會優先盡量嘗試將資料快取記憶體中,記憶體快取不下會寫入磁碟。

4.通常不建議使用disk_only和字尾為2的級別,因為完全基於磁碟檔案進行資料讀寫,會導致效能急劇降低,有時還不如重新計算一次所有rdd,字尾為2級別,必須將所有資料都複製乙份副本,並且傳送到其它節點上,資料複製以及網路傳輸會導致較大效能開銷,除非要求作業高可用性,否則不建議使用。

1.3.4 gc**過程

大資料集群調優

場景1 在datanode開始工作 通電 的時候,會上報本地的資料塊給namenode的客戶端進行註冊,這時候客戶端個數比較關鍵,如果太少,datanode在連線namenode的時候會出現總是超時或者連線被拒絕 如果設定太大,則記憶體開銷會增大,造成不必要的浪費,最終可能導致記憶體溢位。引數 df...

開發效能調優之資料傾斜調優

常見表現 在hive中 map階段早就跑完了,reduce階段一直卡在99 很大情況是發生了資料傾斜,整個任務在等某個節點跑完。在spark中大部分的task執行的特別快,剩下的一些task執行的特別慢,要幾分鐘或幾十分鐘才執行完乙個task hive中大表join的時候,容易產生資料傾斜問題,sp...

spark調優之資料傾斜

問題出現的原因 資料傾斜的表現 資料傾斜的表現 遇到這種方式問題莫慌看思路 問題 資料傾斜會導致資料溢位,可能是其中的某個task分配了大量的資料,執行出錯,導致資料傾斜,資料溢位.1.方案一 聚合源資料 只針對常見的聚合操作的情況 2.方案二 使用過濾的方法 只針對只使用部分資料的情況 3.方案三...