如何在hadoop纱线中获得容器cpu /内存使用量

时间:2014-11-28 14:54:43

标签: resources monitoring yarn

我是hadoop / yarn的新手,需要在任务执行期间消耗容器资源。

当我在apache hadoop网站上查看doc时,它说" nodemanager ...负责容器,监控他们的资源使用情况(cpu,内存,磁盘,网络)并向资源管理器报告#34 ;。 我的理解是节点管理器会定期报告资源使用情况以及心跳。

当我查看源代码时。在NodeStatusUpdaterImpl中,totalResource包含在RegisterNodeManagerRequest中。我认为它是在init nodemanager时调用的,并告诉RM有关配置的资源。但在NodeHeartbeatRequest中,nodestatus只有容器ID,但没有cpu内存等。

那么请你帮我澄清一下容器使用的CPU内存是否会报告给RM?我怎么能得到这样的数据?

非常感谢!

1 个答案:

答案 0 :(得分:1)

这是Container Monitor的实现:

hadoop-2.6.0-src/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/ContainersMonitorImpl.java

有一些方法可以检查容器是否超出限制,而这个isProcessTreeOverLimit将显示纱线如何获取某个容器(进程)的内存使用情况。我不确定是否有可用于获取这些信息的API。但是你可以看到这个文件

hadoop-2.6.0-src/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/ProcfsBasedProcessTree.java

它向您展示Yarn如何获取内存:跟踪/proc中的流程文件。这个answer会给你命令。我认为可以在没有Yarn API的情况下添加某些代码来获取内存(我希望它也有这些API)。