Yarn上的幾個問題整理


 
1. NodeManager是如何Kill掉Container的呢?
答,在DefaultContainerExecutor中,
a. 使用命令行kill一個app后,ContainerLaunch中的handler中會處理兩種事件(LAUNCH_CONTAINER, CLEANUP_CONTAINER), 在CLEANUP_CONTAINER中,會調用ContainerLaunch.cleanupContainer()方法。
b. 在ContainerLaunch.cleanupContainer()方法中,首先從文件中獲取container的pid (啟動container的時候會把pid寫到臨時目錄下)。 調用ContainerExecutor.signal()方法執行
kill -0 -pid
kill -15 -pid
 然后新建一個DelayedProcessKiller線程,它會調用ContainerExecutor.signal() 執行。
kill -0 -pid
kill -9 -pid
c. 為什么pid前加 "-"呢?pid前加一個 "-" 的目的是kill掉這個進程組,包括此進程與其所有子進程。
d. 執行kill的命令后會刪除相應的pid文件。
e. 為什么要每次kill命令前要 kill -0 -pid呢?
 
2. Yarn的RM會通過proxy把用戶的請求重定向到AppMaster上,  但從uri地址來看, 好像還是顯示RM的地址,  其在代碼上是如何實現的呢
答,在WebAppProxyServlet的doget中, 當遇到用戶請求的時候, 會執行doget,
   它首先會獲取applicationReport,  從application中獲取originalTrackingUrl (一個目標url),
   如果job結束(kill, finished, failed),  會重定向到originalTrackingUrl 的頁面,
   其它情況,會向appmaster(originalTrackingUrl )請求相應的數據,  獲取數據后發送給客戶端。
所以關鍵在於originalTrackingUrl 
 
 
3. 另外rm的代碼中包括一個web-proxy的工程. 它是做什么的呢
答,在yarn的RM中,包括web-proxy工程,它可以啟動一個單獨的進程,對外提供web服務,從resourcemanager上點擊正在執行的app,會跳轉到 yarn.web-proxy.address,這里展示正在執行的job信息,job執行結束后,會跳轉到historyserver上;如果沒有配置 yarn.web-proxy.address,則這個功能會集成到RM中。
需要配置 yarn.web-proxy.address
啟動方式為 ./sbin/yarn-daemon.sh start proxyserver 


免責聲明!

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



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