Spark程式優化及常見報錯問題分析

2021-08-16 14:10:16 字數 1756 閱讀 2127

在實際的基於spark平台的大資料分析專案中,為提高程式的執行效率,對程式進行優化是必不可少的,本文基於個人在大資料專案中使用spark進行程式設計實現的實踐經歷,針對spark程式優化問題進行總結,具體內容如下所述。

資料傾斜問題是指在spark任務的執行過程中,某個shuffle階段的大量資料被分配給某個或某幾個executor進行處理,導致這幾個executor的執行時長遠遠超過其他executor。

由於spark中shuffle階段之間是序列操作,只有當前階段的所有任務計算完成後才能進入下乙個shuffle階段,因此當前階段的執行時長由耗時最長的executor決定,資料傾斜會使得整個spark任務的耗時過長,甚至有記憶體溢位的風險導致任務報錯。資料傾斜問題對整個程式的效能影響非常大,因此都會將其作為乙個spark優化專題進行講解,詳細的優化文章網上有很多,在這裡僅拋磚引玉。

(1)資料傾斜問題的原因核查

如何發現spark任務存在資料傾斜問題?常見的方法是通過觀察spark任務的執行日誌記錄進行核查。比如通過spark自帶的web ui工具檢視正在執行的spark程式的詳細狀態,若某個stage階段中有乙個executor執行時長遠遠大於其他executor,則該stage存在資料傾斜問題,可定位到該stage對應的程式**處進行詳細核查。

(2)利用資料預處理方法徹底解決資料傾斜問題

資料傾斜問題的主要原因是資料的分布不均衡導致,常見的解決方法是針對資料的分布不均衡進行預處理操作使其變得均衡。

web ui的預設位址為:http://master:8080,在瀏覽器輸入該**即可,其中master為集群主節點的ip。介面如下圖所示:

(1)executor-memory設定偏小(擷取executor所在節點的資源占用情況)

在yarn模式下,executor會直接被kill掉,導致任務執行失敗。

解決辦法:在提交任務時將executor-memory引數的值調大一些即可解決。

(2)任務的併發度設定太高

圖中cpu資源占用過高,導致任務堵塞。主要原因是分配的cpu核數有限,但任務的併發度很高,使得cpu處理不過來,出現任務堵塞,最終導致任務失敗。

解決辦法:定位發生該問題的**段,通過repartition()方式調低rdd的分割槽值或者在任務提交時申請更多的cpu核數。

(3)executor假死問題

圖中出現executor心跳連線超時,導致任務執行失敗。主要原因是設定的executor-memory過大或者是partition設定大太小,導致executor端的jvm全域性**時長過長,導致其耗時超過executor的心跳時長,使得master誤認為executor端出現異常而將executor 正執行的任務kill掉。

解決辦法:定位發生該問題的**段,合理調整executor-memory和rdd的partition值。

python常見報錯及分析

1.typeerror unsupported operand type s for int and str 意思是數字和字串不能放在一起運算,出現的 如下 num input 請輸入乙個1到40之間的數字 if num 1 num 10 print 這個數字介於1到10之間 elif num 10...

Cydia Impactor 常見報錯及原因

在使用過程中cydia impactor報錯,下面彙總了常見原因及解決方法以供參考 1 provision.cpp 81 2 provision.cpp 168 cpp 173 cpp 150 原因一 密碼輸入錯誤 原因二 未關閉雙重認證 解決方法 在 impactor 裡選擇 insecure s...

oralce常見報錯及處理方法

oracle資料庫無法登陸報錯 error ora 00257 archiver error.connect internal only,until freed.原因是歸檔日誌存放到了資料閃回區,導致資料閃回區滿了 使用sqlplus登陸資料庫,執行select from v flash recov...