使用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}}
$
不确定"槽"是什么意思,因为在提交MR作业时,您实际上可以指定减速器容器的大小。