YARN中實現了多個狀態機對象,包括ResourceManager中的RMAppImpl、RMApp-AttemptImpl、RMContainerImpl和RMNodeImpl,NodeManager中的ApplicationImpl、ContainerImpl和LocalizedResource,MRAppMaster中的JobImpl、TaskImpl和TaskAttemptImpl等。爲了便於用戶查看這些狀態機的狀態變化以及相關事件,YARN提供了一個狀態機可視化工具,具體操作步驟如下。
步驟1 將狀態機轉化爲graphviz(.gv)格式的文件,在源代碼根目錄下執行編譯命令如下:
mvn compile -Pvisualize
經過該步驟後,本地目錄中生成了ResourceManager.gv、NodeManager.gv和MapReduce.gv三個graphviz格式的文件。NodeManager.gv文件中LocalizedResource狀態機部分內容如下:subgraph cluster_LocalizedResource {
label="LocalizedResource"
"LocalizedResource.FAILED" [ label = FAILED ];
"LocalizedResource.DOWNLOADING" [ label = DOWNLOADING ];
"LocalizedResource.DOWNLOADING" -> "LocalizedResource.DOWNLOADING" [ label = "REQUEST,\nRELEASE" ];
"LocalizedResource.DOWNLOADING" -> "LocalizedResource.FAILED" [ label = "LOCALIZATION_FAILED" ];
"LocalizedResource.DOWNLOADING" -> "LocalizedResource.LOCALIZED" [ label = "LOCALIZED" ];
"LocalizedResource.INIT" [ label = INIT ];
"LocalizedResource.INIT" -> "LocalizedResource.DOWNLOADING" [ label = "REQUEST" ];
"LocalizedResource.LOCALIZED" [ label = LOCALIZED ];
"LocalizedResource.LOCALIZED" -> "LocalizedResource.LOCALIZED" [ label = "REQUEST,\nRELEASE" ];
}
步驟2 使用可視化包graphviz中的相關命令生成狀態機圖,Shell命令具體如下:
dot -Tpng NodeManager.gv > NodeManager.png
如果尚未安裝graphviz包,操作該步驟之前先要安裝該包,cent os安裝命令如下:sudo yum install graphviz
打開NodeManager.png,如下圖所示(爲了便於展示,分拆成了兩個圖):