前言
driver和executor心跳機制分為兩種機制:
1、executor發送心跳機制
2、driver接受心跳機制
至于為何要分為兩種,原因是在分布式場景中,服務的穩定性是無法保障的,例如executor當機後無法發送心跳,故driver端需要有executor心跳逾時機制,同樣如果是driver端當機或者GC導緻executor無法成功發送心跳,那麼executor也有自己的逾時結束程序的機制
1、executor心跳機制
executor向driver發送心跳的間隔預設[spark.executor.heartbeatInterval]:10s
心跳異常次數超過預設門檻值[spark.executor.heartbeat.maxFailures]:60次
當超過門檻值後executor會自殺,意味着executor會重試發送大約10分鐘的心跳,但大部分不會發送到10分鐘
因為driver在120s内沒有接收到executor的請求後就會主動殺死executor程序[dirver心跳機制],是以10分鐘的場景适用于driver端挂掉的情況下executor自殺,退出錯誤碼為56。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL2ATYiNWMjRWZjRTZ4YDZ4MTMwQjZ4EWOwATY2kDZ1Q2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
executor自動退出碼:56
例如下圖:生産中executor連接配接逾時日志
2、driver心跳機制
driver對executor心跳的檢測機制:當driver端檢測到executor最後一次心跳時間距今超過了[spark.network.timeout]120s,則啟動一個線程殺死executor程序[殺死的過程是請求叢集管理器進行處理]
此時executor被殺死後的退出碼應該是:143
生産中driver日志: