如何在Hadoop Yarn中获取容器CPU/内存使用情况



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

当我在 apache hadoop 网站上查看文档时,它说"nodemanager...负责容器,监控其资源使用情况(CPU,内存,磁盘,网络)并向资源管理器报告"。我的理解是,节点管理器将定期报告资源使用情况和心跳。

当我查看源代码时。在 NodeStatusUpdaterImpl 中,totalResource 包含在 RegisterNodeManagerRequest 中。我认为在初始化节点管理器并告诉 RM 配置的资源时会调用它。但是在 NodeHeartbeatRequest 中,nodestatus 只有容器 ID,而没有 CPU 内存等。

那么,您能否帮助我澄清容器使用的 CPU 内存是否会报告给 RM?我如何获得这些数据?

非常感谢!

这是容器监视器的实现:

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将向您展示yarn如何获取某些容器(进程)的内存使用情况。我不确定是否有我们可以用来获取这些信息的 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 中的进程文件。这个答案会给你命令。我认为可以在没有 Yarn API 的情况下添加某些代码来获取内存使用情况(我希望它也有这些 API)。

相关内容

  • 没有找到相关文章