• 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 
  • 相关阅读:
    qt creator源码全方面分析(2-10-4)
    qt creator源码全方面分析(2-10-3)
    qt creator源码全方面分析(2-10-2)
    qt creator源码全方面分析(2-10-1)
    qt creator源码全方面分析(2-9)
    flex布局使用
    filter,map,reduce三个数组高阶函数的使用
    git的使用总结
    axios学习和使用
    vuex的学习
  • 原文地址:https://www.cnblogs.com/shenh062326/p/3562460.html
Copyright © 2020-2023  润新知