我是hadoop / yarn的新手,在执行任务期间需要消耗容器资源。
当我在apache hadoop网站上查看doc时,上面写着“ nodemanager ...负责容器,监视其资源使用情况(cpu,内存,磁盘,网络),并将其报告给resourcemanager”。我的理解是,节点管理器将定期报告资源使用情况以及心跳。
当我看源代码时。在NodeStatusUpdaterImpl中,RegisterNodeManagerRequest中包含了totalResource。我认为在初始化nodemanager时会调用它,并告诉RM有关已配置的资源。但是在NodeHeartbeatRequest中,nodestatus仅具有容器ID,而没有CPU内存等。
因此,您能否帮我澄清一下容器使用的cpu内存是否会报告给RM?我如何获得此类数据?
非常感谢!
这是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
。该答案将为您提供命令。我认为可以在不使用Yarn API的情况下添加某些代码来获取内存使用情况(我希望它也具有这些API)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句