yarn UI中appliaction展示个数分析

一 背景

客户在使用我们的EMR产品时一天大概提交2000个appliaction,但是yarn的UI界面仅仅展示出了100多个历史application信息,影响了客户查阅历史信息。

二 源码分析

yarn提供的WEB界面可以展示历史application,如下图所示:

前端页面仅仅是展示application信息,application的详细信息 可以从RMContext中获取。RMContext的实现类RMContextImpl存储着所有Appliaction信息,但是存储Application的个数确实由RMAppManager控制。

RMAppManager在RM中的作用是管理所有application,比如通过submitApplication,finishApplication,recoverApplication提交,结束,恢复application。

RMApp是ResourceManager中用于维护一个Application生命周期的数据结构,它的实现是RMAppImpl,该类维护了一个Application状态机,记录了一个Application可能存在的各个状态以及导致状态间转换的事件。

针对application的个数,RMAppManager中有两个变量来控制这个数量,

DEFAULT_RM_MAX_COMPLETED_APPLICATIONS:由yarn.resourcemanager.max-completed-applications参数控制,其意义是:

DEFAULT_RM_STATE_STORE_MAX_COMPLETED_APPLICATIONS:由yarn.resourcemanager.state-store.max-completed-applications参数控制

(完成应用程序的最大数量的RM状态存储,默认情况下等于DEFAULT_RM_MAX_COMPLETED_APPLICATIONS,当第二个变量大于第一个变量时,在构造方法中maxCompletedAppsInMemory会被初始化等于maxCompletedAppsInStateStore。)

当一个APP完成时(KILLED, FINISHED,FAILED都属于完成状态),RMAppManager会调用如下方法:

该方法调用finishAppliaction去结束一个application的生命周期,必将app的个数记录起来,然后使用checkAppNumCompletedLimit方法检查app个数是否超过阈值,如果超过就将RMContext中存储的application剔除去一个。

三 总结

我们EMR配置的个数是150,DEFAULT_RM_MAX_COMPLETED_APPLICATIONS的默认值是10000。实际经验是这个值保留平均每天作业数的2到3倍就可以,就是保留数据2,3天。不然使用1w数据确实很大,前台显示缓慢也会给resourcemanager带来不必要的压力和性能瓶颈。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏JavaEdge

线程安全与锁优化1 线程安全2 锁优化

34990
来自专栏程序员宝库

购物网站的 redis 相关实现(Java)

本文主要内容: 登录cookie 购物车cookie 缓存数据库行 测试 必备知识点: WEB应用就是通过HTTP协议对网页浏览器发出的请求进行相应的服务器或者...

539140
来自专栏along的开发之旅

Java8移除永久代

最近看深入理解Java虚拟机, 在实战OutOfMemoryError的运行时常量池溢出时, 我的Intellij提示如下:

12510
来自专栏眯眯眼猫头鹰的小树杈

深入理解 依赖注入

相信所有面试java开发的童鞋一定都被问到过是否使用过Spring,是否了解其IOC容器,为什么不直接使用工厂模式,以及究竟IOC和DI区别在于哪里这种问题。今...

9310
来自专栏Java Web

Java 面试知识点解析(二)——高并发编程篇

在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Jav...

54870
来自专栏Java Web

Java 面试知识点解析(二)——高并发编程篇

290100
来自专栏Golang语言社区

Go Channel 应用模式(一)

Channel是Go中的一种类型,和goroutine一起为Go提供了并发技术, 它在开发中得到了广泛的应用。Go鼓励人们通过Channel在goroutine...

22420
来自专栏程序员的知识天地

使用 JS 实现一个本地数据库

前端很多时候还是需要保存一些数据的,这里的保存指的是长久的保存。以前的思想是把数据保存在 Cookie 中,或者将 key 保存在 Cookie 中,将其他数据...

50720
来自专栏Python中文社区

OpenStack中的RESTful API是如何实现的?

OpenStack作为一个开源的IaaS平台,各个组件和服务之间的消息传递都是通过RESTfulAPI和RPC传递,这里主要讲讲它是如何实现REST的。由于大家...

36680
来自专栏安恒网络空间安全讲武堂

堆利用之double-free

38040

扫码关注云+社区

领取腾讯云代金券