Java 通过RESTAPI的Hadoop度量:allocatedMB、allocatedVcores和runningContainers始终为-1

Java 通过RESTAPI的Hadoop度量:allocatedMB、allocatedVcores和runningContainers始终为-1,java,rest,hadoop,Java,Rest,Hadoop,我们尝试报告每个用户的每月hadoop应用程序指标,并使用以下REST API路径使用REST API: 除了allocatedMB、allocatedVcores和runningContainers始终为-1之外,返回的数据看起来不错 有人能解释一下原因吗?如果在调用RM cluster apps API时,您的群集上没有正在运行的作业,那么您正在查找历史数据。基于Hadoop代码(Hadoop yarn project/下的QueueStatisticsPBImpl.java),当RM不知

我们尝试报告每个用户的每月hadoop应用程序指标,并使用以下REST API路径使用REST API:

除了allocatedMB、allocatedVcores和runningContainers始终为-1之外,返回的数据看起来不错


有人能解释一下原因吗?

如果在调用RM cluster apps API时,您的群集上没有正在运行的作业,那么您正在查找历史数据。基于Hadoop代码(Hadoop yarn project/下的QueueStatisticsPBImpl.java),当RM不知道该项的值时,使用-1作为默认值

@Override
public long getAllocatedVCores() {
  QueueStatisticsProtoOrBuilder p = viaProto ? proto : builder;
  return (p.hasAllocatedVCores()) ? p.getAllocatedVCores() : -1;
}
由于其他字段是存储在作业历史服务器中的值(除了
allocatedMB
allocatedVCores
runningContainers
),因此它们包含实际值


感谢您对Hadoop 3.x的回答。我在Hadoop 2.x中找不到allocatedVCores的正确分配,但ApplicationResourceUsageReport中的一条注释指出,如果应用程序数据无效或无法访问,则会设置-1。对我来说,问题是,应用程序数据不再存储在历史服务器上,因此我无法再访问它。