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 
相關文章
相關標籤/搜索