如何查询指定范围的Yarn任务列表

举报
泽及天下不为仁 发表于 2021/09/13 16:08:51 2021/09/13
【摘要】 如何查询指定范围的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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。