如何查询指定范围的Yarn任务列表
1 问题背景:
查询yarn任务运行状态可以使用YarnClient里面的getApplications方法来获取任务列表。
List<ApplicationReport> result = client.getApplications(request);
但是这个方法在被频繁调用的时候会对ResourceManager内存有较大的压力,尤其当Yarn上面存放的历史任务较多的情况下,RM内存有可能会被耗完。因此需要对查询的application列表做一定的限制。
2 处理方式:
YarnClient类除了可以获取全部的app列表外还提供了一些其他的操作逻辑:
如果有appId,可以直接使用getApplicationReport(ApplicationId appId)获取到指定任务状态。
如果只需要指定applicationType类型的app列表,则使用getApplications(Set<String> applicationTypes)获取到指定类型任务的状态。
其他的API以此类推,这里主要介绍的是getApplications(GetApplicationsRequest request)方法。
样例代码:
GetApplicationsRequest request =
ApplicationsRequestBuilder.create()
.withStateQuery(stateQuery)
.withStatesQuery(statesQuery)
.withUserQuery(userQuery)
.withQueueQuery(rm, queueQuery)
.withLimit(limit)
.withStartedTimeBegin(startedBegin)
.withStartedTimeEnd(startedEnd)
.withFinishTimeBegin(finishBegin)
.withFinishTimeEnd(finishEnd)
.withApplicationTypes(applicationTypes)
.withApplicationTags(applicationTags)
.build();
List<ApplicationReport> result = client.getApplications(request);
for (ApplicationReport app:result) {
System.out.println(app);
}
GetApplicationsRequest类可以传入想要的限定参数,将不匹配的任务过滤掉。
例如需要查询某段时间内启动的任务,则可以设置withStartedTimeBegin和withStartedTimeEnd来限定对应的时间点内启动的任务。
3 参考资料:
https://hadoop.apache.org/docs/r3.1.1/api/org/apache/hadoop/yarn/client/api/YarnClient.html
- 点赞
- 收藏
- 关注作者
评论(0)