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 

转载于:https://www.cnblogs.com/shenh062326/p/3562460.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值