2017-06-06 75 views
0

我有通過Luigi連接的Spark作業和在30臺機器羣集(每臺15GB RAM)上運行的S3作業的序列,這些作業定期掛在各個階段。今天是處理5 GB數據的時間。該階段需要3,5h調試在EMR上運行的Spark應用程序

這個掛起的階段只是對數據集的簡單處理以及稍後的groupByKey(用戶id,1L)和reduceGroups以獲取用戶事件計數。 即使某些用戶有1m事件(不太可能,因爲之前在過濾機器人之後最多爲300K),在休息結束後,單個節點上不應該有7個分區需要3個小時。

有什麼想法? 也許問題是我們使用的數據集仍然是實驗性的? 我們如何進行調試? Thread dump from the executor taking 3 hours

回答

0

瞭解如何理解Spark UI。這本書部分可以幫助您開始:https://jaceklaskowski.gitbooks.io/mastering-apache-spark/spark-webui.html

從星火UI,你應該能夠看到多少數據(百分)每級/分區/節點/等較新的火花UI進行處理(從2.0版本開始)在SQL選項卡下顯示更細緻的信息。這有助於您查找數據是否存在偏斜。有許多選項可以處理數據歪斜,其中大部分都是針對您的應用程序的。例如,瞭解Facebook如何利用自適應分區處理數據歪斜: https://www.slideshare.net/SparkSummit/handling-data-skew-adaptively-in-spark-using-dynamic-repartitioning

有可能您沒有數據歪斜,但您的某個羣集節點「已損壞」。如果你發現它是一個比其他節點慢的節點,那就是這種情況。我們在AWS環境中看到了這種異常現象。殺死節點並啓動新節點後,所有事情都開始正常工作。

相關問題