YARN 新特性-ResourceManager 自動重啟


為了減少生產集群上作業執行失敗的可能性,在ResourceManager 發生單點故障之后,應該自動重啟ResourceManager 的功能。

一、原理

ResourceManager(以下簡稱RM)重啟在不同版本的Hadoop有兩種不同的實現,兩種實現的配置是一樣的,只是原理不一樣。

第一種是Non-work-preserving RM restart ,即在重啟過程中任務不保留。它的原理是當Client提交一個application給RM時,RM會將該application的相關信息存儲起來,具體存儲的位置是可以在配置文件中指定的,可以存儲到本地文件系統上,也可以存儲到HDFS或者是Zookeeper上,此外RM也會保存application的最終狀態信息(faild,killed,finished),如果是在安全環境下運行,RM還會保存相關證書文件。

當RM被關閉后,NodeManager(以下簡稱NM)和Client由於發現連接不上RM,會不斷的向RM發送消息,以便於能及時確認RM是否已經恢復正常,當RM重新啟動后,它會發送一條re-sync(重新同步)的命令給所有的NM和ApplicationMaster(以下簡稱AM),NM收到重新同步的命令后會殺死所有的正在運行的containers並重新向RM注冊,從RM的角度來看,每台重新注冊的NM跟一台新加入到集群中NM是一樣的。AM收到重新同步的命令后會自行將自己殺掉。接下來,RM會將存儲的關於application的相關信息讀取出來,將在RM關閉之前最終狀態為正在運行中的application重新提交運行。


第二種是Work-preserving RM restart,即在重啟過程中任務是保留的。它與第一種不同的地方在於,RM會記錄下container的整個生命周期的數據,包括application運行的相關數據,資源申請狀況,隊列資源使用狀況等數據。如此一來,當RM重啟之后,會讀取之前存儲的關於application的運行狀態的數據,同時發送re-sync的命令,與第一種方式不同的是,NM在接受到重新同步的命令后並不會殺死正在運行的containers,而是繼續運行containers中的任務,同時將containers的運行狀態發送給RM,之后,RM根據自己所掌握的數據重構container實例和相關的application運行狀態,如此一來,就實現了在RM重啟之后,緊接着RM關閉時任務的執行狀態繼續執行。

將兩種方式對比,第一種只保存了application提交的信息和最終執行狀態,並不保存運行過程中的相關數據,所以RM重啟后,會先殺死正在執行的任務,再重新提交,從零開始執行任務。第二種方式保存了application運行中的狀態數據,所以在RM重啟之后,不需要殺死之前的任務,而是接着原來執行到的進度繼續執行。

 

二、配置

官網給的配置示例,配置yarn-site.xml :

 <!--啟動RM重啟的功能,默認是false-->
<property> <description>Enable RM to recover state after starting. If true, then yarn.resourcemanager.store.class must be specified</description> <name>yarn.resourcemanager.recovery.enabled</name> <value>true</value> </property>
<!-- 用於狀態存儲的類,默認是基於Hadoop 文件系統的實現(FileSystemStateStore)--> <property> <description>The class to use as the persistent store.</description> <name>yarn.resourcemanager.store.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value> </property>

<!--被RM用於狀態存儲的ZK服務器的主機:端口號,多個ZK之間使用逗號分離--> <property> <description>Comma separated list of Host:Port pairs. Each corresponds to a ZooKeeper server (e.g. "127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002") to be used by the RM for storing RM state. This must be supplied when using org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore as the value for yarn.resourcemanager.store.class</description> <name>yarn.resourcemanager.zk-address</name> <value>127.0.0.1:2181</value> </property>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM