您必须通过 REST api 手动检查 YARN 以查看何时没有应用程序在运行。
GET http://<rm http address:port>/ws/v1/cluster/metrics
{
"clusterMetrics":
{
"appsSubmitted":0,
"appsCompleted":0,
"appsPending":0,
"appsRunning":0,
"appsFailed":0,
"appsKilled":0,
"reservedMB":0,
"availableMB":17408,
"allocatedMB":0,
"reservedVirtualCores":0,
"availableVirtualCores":7,
"allocatedVirtualCores":1,
"containersAllocated":0,
"containersReserved":0,
"containersPending":0,
"totalMB":17408,
"totalVirtualCores":8,
"totalNodes":1,
"lostNodes":0,
"unhealthyNodes":0,
"decommissionedNodes":0,
"rebootedNodes":0,
"activeNodes":1
}
}
当没有待处理或正在运行的应用程序时,您可以运行您的脚本。我只会创建一个处于 while 循环 + 睡眠中的 shell 脚本,然后等待它们都为 0。
您也可以寻找可用的内存/内核。事实上,我会走那条路,这样你就不会总是在等待,你只需保证足够的资源。