确定 Hadoop 集群中 reduce 槽的数量

Determining the number of reduce slots in Hadoop cluster

使用Java API,如何确定当前集群的reduce槽总数? (如果我能得到当前正在使用的插槽数量,那将是一个奖励。)

我的用例:我有一个启动另一个 Hadoop 作业的 Hadoop 作业。对于第二份工作,我必须设置减速器的数量。这应该基于可用插槽的数量。此外,集群的大小可能会发生变化。

我正在使用 Hadoop 2.7.3。它通常在 Amazon EMR 上运行,但我更喜欢只使用 Hadoop API.

的解决方案

您可以使用 Java HTTP 客户端通过 ResourceManager REST API 从 YARN 请求集群指标。

响应将是 JSON,其中包含集群上的总内存、分配内存、预留内存和可用内存以及 vcore。

$ curl -G -k https://<resource-manager-host>:8090/ws/v1/cluster/metrics
{"clusterMetrics":      
{"appsSubmitted":999999,"appsCompleted":999999,"appsPending":0,"appsRunning":99,"appsFailed":99,"appsKilled":999,
 "reservedMB":0,"availableMB":99999999,"allocatedMB":9999999,
"reservedVirtualCores":0,"availableVirtualCores":9999,"allocatedVirtualCores":9999,
"containersAllocated":9999,"containersReserved":0,"containersPending":999,
"totalMB":9999999,"totalVirtualCores":99999,
"totalNodes":999,"lostNodes":9,"unhealthyNodes":9,"decommissioningNodes":0,"decommissionedNodes":99,"rebootedNodes":0,"activeNodes":999}}
$

不确定"slots"是什么意思,因为您实际上可以在提交 MR 作业时指定 reducer 容器大小。