Hadoop Yarn 研究
在页面左边有一个Nav, Tools里面的Local logs可以看到NodeManager
本身的日志. 这个日志是由HttpServer
提供的标准servlets. 对应的还有 /static
, /stacks
, /logLevel
, /metrics
, /jmx
, /conf
等众多servlet.由于这个HttpServer
是hadoop-common提供的,所以所有hadoop页面都会有这几个servlet.
Application日志由AppBlock
渲染. 没看到列出Application所有的Containers的页面. RMAppAttempt
接口里也没有提供这种方法. 事实上RMAppAttempt
有一个Set<NodeId> getRanNodes()
的接口, 如果页面渲染Application申请过的节点, 那也可以通过ApplicationId从该节点NodeManager页面找到对应的Container日志。但目前没有提供,运维起来不好查错. Set<NodeId> getRanNodes()
接口的值是通过RMAppAttemptImpl.ContainerAcquiredTransition
得到, 不知道Yarn为什么不直接把事件的Container存下来,而是存NodeId.
Container日志分两类.
ContainerLogsPage
渲染AggregationLogsBlock
渲染Container日志的Aggregation默认是关闭的, 如果开启, 当Application结束的时候, LogAggregationService
会将container的日志上传至hdfs. 此时点击Container的日志会闪过一个"java.lang.Exception: Unknown container. Container either has not started or has already completed or doesn't belong to this node at all. "的页面,随即转向AggregationLogsBlock
所渲染的页面.