問題
工作失敗的ExecutorLostFailure錯誤消息。
ExecutorLostFailure(執行人< 1 >退出正在運行的任務之一所致)原因:遺囑執行人心跳超時後< 148564 >
導致
的ExecutorLostFailure錯誤信息意味著一個執行人的Apache火花集群已經丟失。這是一個通用的錯誤消息,可以有一個以上的根源。在本文中,我們將看看如何解決問題根源時由於執行人忙碌。
這可能發生,如果負載過高,遺囑執行人不能發送心跳信號,司機在一個預定義的閾值。如果發生這種情況,司機認為執行程序丟失。
你如何確定高CPU負載是遺囑執行人迷失的原因?
確認執行人很忙,你應該檢查Ganglia指標和檢查CPU負載。
如果CPU的負載是高:
- 你有太多的小文件
- 你的工作可能會推出很多API調用/請求
- 你沒有一個最佳的分區策略
- 你沒有計算密集的集群
解決方案
這是你需要做的基於不同的原因失敗。
有太多的小文件嗎?
緊湊的小文件更大的文件。三角洲湖支持優化(AWS|Azure|GCP)用於壓縮文件。自動優化磚(AWS|Azure|GCP)自動壓縮小文件中寫道。
如果你不使用三角洲湖,你應該計劃來創建更大的文件寫入數據表之前。這可以通過應用重新分配()在寫文件的位置。
有太多的API請求嗎?
試圖減少API調用的數量由你的工作。這同時適用於外部API服務和任何磚REST API調用。這樣做的方法之一是通過實現源數據所以它包含一個小數量的分區,然後進行必要的API調用。
也是好的,確定你有大量的API請求的原因。例如,如果根本原因是太多的小文件,你應該盡可能多的小文件壓縮為大文件。幾大文件建議在許多小文件。
有太多的分區嗎?
一個常見的錯誤是跨越式的數據源。不是最佳的實例與多個成千上萬的分區。理想情況下,您應該有一個小數量的分區可用內核可以並行處理的集群。
確保你的分區有盡可能少的水平。例如,而不是使用一個分區結構年= /月= = / /天日期,你可以減少到一個水平。例如,日期= yyyy-MM-dd。
避免分區數據基於列基數高,像id列。而不是選擇一個列中常用的查詢,但基數較低。
是Ganglia的CPU負載指標高嗎?
- 如果你有高CPU負載。
- 如果集群利用率超過80%。
- 如果你注意到神經節中的某些節點指標是紅色的。
這意味著你沒有使用正確的類型的集群工作負載。
確保你選擇的集群有足夠的CPU核和可用內存。你也可以嚐試使用計算優化工人而不是默認的類型存儲優化工人為您的集群類型。