天天看點

spark3.0源碼分析-driver-executor心跳機制

前言

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。

spark3.0源碼分析-driver-executor心跳機制
spark3.0源碼分析-driver-executor心跳機制

executor自動退出碼:56

spark3.0源碼分析-driver-executor心跳機制

例如下圖:生産中executor連接配接逾時日志

spark3.0源碼分析-driver-executor心跳機制

2、driver心跳機制

driver對executor心跳的檢測機制:當driver端檢測到executor最後一次心跳時間距今超過了[spark.network.timeout]120s,則啟動一個線程殺死executor程序[殺死的過程是請求叢集管理器進行處理]

spark3.0源碼分析-driver-executor心跳機制
spark3.0源碼分析-driver-executor心跳機制
spark3.0源碼分析-driver-executor心跳機制

此時executor被殺死後的退出碼應該是:143

生産中driver日志:

spark3.0源碼分析-driver-executor心跳機制

繼續閱讀