我們現在來考慮下下面的場景:
上面提到的場景其實對我們人來說可以通過某些措施來避免。但是對於 Apache Spark 2.2.0 版本之前是無法避免的,不過高興的是,來自 Cloudera 的工程師解決了這個問題:引入了黑名單機制 Blacklist(詳情可以參見 SPARK-8425 ,具體的設計文檔參見 Design Doc for Blacklist Mechanism ),並且隨著 Apache Spark 2.2.0 版本發布,不過目前還處於實驗性階段。
黑名單機制其實是通過維護之前出現問題的執行器(Executors)和節點(Hosts)的記錄。當某個任務(Task)出現失敗,那麽黑名單機制將會追蹤這個任務關聯的執行器以及主機,並記下這些信息;當在這個節點調度任務出現失敗的次數超過壹定的數目(默認為2),那麽調度器將不會再將任務分發到那臺節點。調度器甚至可以殺死那臺機器對應的執行器,這些都可以通過相應的配置實現。
我們可以通過 Apache Spark WEB UI 界面看到執行器的狀態(Status):如果執行器處於黑名單狀態,妳可以在頁面上看到其狀態為 Blacklisted ,否則為 Active。如下圖所示:
擁有了黑名單機制之後,上面場景的問題就可以很好的解決。
目前黑名單機制可以通過壹系列的參數來控制,主要如下:
因為黑名單機制目前還處於實驗性狀態,所以上面的壹些參數可能會在後面的 Spark 中有所修改。