您好,登錄后才能下訂單哦!
在使用 Apache Spark 的時候,作業會以分布式的方式在不同的節點上運行;特別是當集群的規模很大時,集群的節點出現各種問題是很常見的,比如某個磁盤出現問題等。我們都知道 ApacheSpark 是一個高性能、容錯的分布式計算框架,一旦它知道某個計算所在的機器出現問題(比如磁盤故障),它會依據之前生成的 lineage 重新調度這個 Task。
我們現在來考慮下下面的場景:
? 有個節點上的磁盤由于某些原因出現間歇性故障,導致某些扇區不能被讀取。假設我們的 Spark 作業需要的數據正好就在這些扇區上,這將會導致這個 Task 失敗。
? 這個作業的 Driver 獲取到這個信息,知道 Task 失敗了,所以它會重新提交這個 Task。
? Scheduler 獲取這個請求之后,它會考慮到數據的本地性問題,所以很可能還是把這個 Task 分發到上述的機器,因為它并不知道上述機器的磁盤出現了問題。
? 因為這個機器的磁盤出現問題,所以這個 Task 可能一樣失敗。然后 Driver 重新這些操作,最終導致了 Spark 作業出現失敗!
上面提到的場景其實對我們人來說可以通過某些措施來避免。但是對于 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 中有所修改。
結語
感謝您的觀看,如有不足之處,歡迎批評指正。
如果有對大數據感興趣的小伙伴或者是從事大數據的老司機可以加群:
658558542
歡迎大家交流分享,學習交流,共同進步。(里面還有大量的免費資料,幫助大家在成為大數據工程師,乃至架構師的路上披荊斬棘!)
最后祝福所有遇到瓶頸的大數據程序員們突破自己,祝福大家在往后的工作與面試中一切順利。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。