他来啦,他来啦!大数据基础平台发布会中提到的智能运维平台,他来啦!
作为数据平台的用户们,下述问题一直困扰着我们:

集群资源水位如何,利用率如何,是否需要扩容?
队列为什么最近大量任务出现pending,什么原因造成?
哪些任务占用了队列的大部分资源,是否合理,能否优化?
任务运行为什么这么慢,哪里出现了问题?
任务是否能优化,加快产出?
任务或服务出现异常,能否自动运维处理?
... ...

我们针对上述问题,研发了一款自助式、智能化的监控诊断平台——EasyEagle。旨在达到如下目的:

各层面的实时资源水位监控(集群、队列、任务、节点),包括申请以及实际使用;
帮助平台管理员以及用户了解各自层面的资源使用状况,帮助用户更好的进行资源优化,提升资源利用率;
对于队列的相关问题,能很快给出诊断结果,减少用户定位时间;
对于任务的性能或异常,能很快给出诊断结果以及建议;
通过对任务的诊断,能提出相关优化建议,进而加快任务的产出以及提高整体的资源利用率。

我们将会从集群队列视角、任务视角、资源治理以及全链路诊断,进行分篇介绍。给各层面的用户展现目前代表性的问题,以及如何使用EasyEagle去发现、解决。本篇将从集群视角和队列视角进行相关的介绍。
1集群视角
1.1 集群基础监控
集群这块,主要是针对平台管理员。他们主要关心的问题如下:

集群资源水位如何?
资源利用率如何?
是否需要扩缩容等等

EasyEagle提供了集群实时资源监控,并能依据所选时间,给出时间段内资源水位的走势情况,依据此信息,管理员能清楚的知道集群闲置及繁忙的时间段,这能为合理的任务编排起到参考作用,例如将非基线任务从繁忙的基线时间段错开,将高资源消耗任务移至资源空闲的时间段调度等。
EasyEagle同时提供了集群任务量的汇总分析功能,以天为维度或以月为维度,可以清楚的了解到集群每天或每月的任务量数值变化,以此能够衡量最近业务的增长/降低情况,并结合资源水位进一步分析集群的可扩展性以及水位变化趋势,为集群资源扩容等操作提供了数据参考。
EasyEagle的集群概览界面,展示了如上介绍的相关指标数据。如下图例所示,展示了集群的实时资源及节点情况、集群任务数量汇总信息,以及集群资源水位等。

图片

此外,作为EasyEagle的亮点之一,可以看到除了集群的内存和CPU的资源水位情况,我们还引入了集群的实际资源使用率(图中绿色的线)。简单来说,在集群分配给任务使用的资源中,有多少是真正的被任务利用到的呢?EasyEagle通过各个节点机器的实际负载和内存使用,汇集成为整个集群的维度的实际资源使用情况。若发现集群可分配资源已经满载,但实际负载却很低,那么就需要关注下,集群大规模的任务资源申请是否有浪费的嫌疑。
为了能够更加直观的展示出实际资源的利用率,EasyEagle将集群每台节点的资源利用率以散点图的形式进行展现,如下图例所示。每个点代表集群中的一个计算节点,横坐标和纵坐标分别是节点内存和CPU利用率。在理想的情况下,机器的内存使用率和cpu使用率应该较为平衡,体现在图中将会是所有点均匀分布在斜率为1的一条线附近。而在所示图例中,发现大多数机器节点cpu利用率明显偏高在40%左右;而内存利用率却不足15%。那么就需要关注,集群中每台计算节点配置和虚拟核及内存大小比例是否合理。

图片

根据上述的实际案例,EasyEagle在此模块明显能告知管理员以下信息:

集群资源水位情况,何时出现繁忙,任务应该如何安排调度时间
资源的实际利用率如何,是否可以进一步优化,而不需要采购机器
集群节点的cpu和内存配比是否正确,应该如何设置配比

总之,EasyEagle能够从集群整体维度入手,对集群资源水位,资源利用情况,任务量变化趋势,机器节点利用率等大数据平台运维人员最关心的点,进行展示与剖析。
1.2 集群队列大量任务pending诊断
针对平台管理员除了提供集群的基础监控分析外,目前EasyEagle还提供了针对集群各个队列运行状况的相关监控。
在我们对于hadoop平台的实践过程中,常遇到这样的现象:用户提交的任务,等待了很久,却发现迟迟调度不起来。这样的现象较普遍,经常会集中在某一个特定的时段,且每天都会周期性的发生。若pending的是非核心任务,非基线任务,或不关注时效性的离线任务,集群或队列发生的任务pending很多时候会不被人感知,从而误以为集群不存在这样的情况;但是如果是核心任务,那大量的pending将会影响业务的产出。
因此,这样的现象应该需要引起注意并解决。EasyEagle对于集群所属队列的pending有如下的分析:
针对发生pending的原因,大致可以分为如下两种情况:
(1)队列资源充足,队列大量任务pending

队列AM资源不足
Yarn调度性能不足

(2)队列资源不足,队列大量任务pending

队列本身资源不足
队列的父队列资源不足,或兄弟队列进行了资源抢占

分析出pending的原因后,会给出以下数据指标:

pending发生的队列
pending问题产生的实际队列
配置时间段内,连续7天,pending问题产生的实际队列的资源使用率趋势
配置时间段内,队列发生过pending的次数

如下图例所示,EasEagle能够默认展示集群在前一天中,有哪些队列发生过pending的情况,问题实际发生的队列,以及出现过pending的原因。

图片

点击查看详情,能够进一步展示,问题产生的实际队列的资源利用率情况,更直观的展示出问题。如下图例所示,可以选择连续七天的队列资源利用率,图中标出的点,表示该时段发生了pending的现象。

图片

综合上述的分析,此功能模块可以解决以下问题:

集群中部分队列出现大量任务pending时,可以及时诊断,提前介入,减少用户感知以及前置处理时长;
通过自动诊断,可以直接告知管理员队列出现大量任务pending的具体原因。

2队列视角
作为多租户的Hadoop集群,可以将整个集群的资源拆分成子队列的形式,以支持对多业务方共享使用集群资源,并使不同业务方之间资源隔离。在这种环境下,对于业务方,可能更偏向于了解自己业务所在队列。

队列各时间段的资源水位如何,任务调度时间如何安排?
队列资源的实际利用率如何,是否有优化空间,是否需要向平台申请新增资源?
某时间段队列可用资源突然少了这么多,是哪个任务造成的?
队列在某个时间段运行特别慢,部分任务提交不上去,出了什么问题?

上述问题是业务方经常会抛给底层开发以及运维人员的。下面将会演示如何通过EasyEagle回答上述问题。
队列资源监控
EasyEagle能够选择任意时段,提供队列内存,CPU的资源使用水位趋势,队列运行和pending的任务数量趋势,如下图例所示:

图片

从上面的队列资源使用视图,业务方能很明确的获取到:

什么时间段,该队列繁忙
任务的编排,应该配置在哪个时间段

在这个队列资源使用视图的下方,EasyEagle还提供了一个可以指定时间段或时间点的任务列表。列表如下所示:

图片

该任务列表中每个任务包含指定时间段或时间点的资源申请水平等信息,能帮忙业务方很快的定位出:
哪个时间段,哪个任务申请了较高的资源
和集群维度的实际资源使用类似,EasyEagle也提供了队列实际资源使用率。EasyEagle通过任务的实际资源使用情况,聚合为队列维度的实际资源使用。因此,某个队列出现实际资源利用率过低,也就代表了队列下的任务出现了资源浪费的情况。如下图所示,蓝色线表示了队列已经占用的资源水位,绿色线表示队列实际的资源使用水位。

图片

若发现了队列资源出现的问题,如集群的资源水位很高,但资源利用率却很低,我们知道这一定是由于队列中大量的任务申请资源出现了浪费导致的。想要提高队列的资源利用率,就一定要从这些任务进行入手治理,通过一定的方式,将任务的资源利用率提高,以此提高队列,乃至整个集群的资源利用率。
在队列的资源分析模块,也非常详尽的提供了队列中资源消耗较高,但资源利用率低的任务列表。这个任务列表也相当于提供了优化收益最大的top任务信息。优先优化这些任务的资源消耗,提高利用率,可以获得最大的收益,并明显的反映在队列资源中。目前该列表返回的信息如下图例所示。

图片

找到了待优化的任务列表,接下来就是针对单个任务的优化了,对于单个任务的资源的优化方式和策略,可以在下文中,任务资源治理功能中获得详细的说明。
总之,在队列资源监控这个模块里,我们能为业务方解决以下问题:

通过获取各时间段队列的资源水位,协助业务方合理安排任务调度;
获取队列资源的实际使用情况,并列出待资源优化任务列表,协助业务方提高队列资源利用率,降低成本;
实时了解,队列大任务(资源方面或运行时长方面)的运行情况;
为队列资源预估提供数据支撑。

3小结
本篇围绕着集群视角和队列视角进行相关介绍。上述两个视角主要是面向数据平台的管理员等角色,他们关心的内容主要是:集群的资源水位以及各队列运行状况,进而合理的调整任务编排以及资源配比。
在后续的篇章中,我们将会以用户,即任务提交者的视角,进行相关的介绍。作者:网易数帆社区链接:https://juejin.cn/post/712311...来源:稀土掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


网易数帆
391 声望550 粉丝

网易数智旗下全链路大数据生产力平台,聚焦全链路数据开发、治理及分析,为企业量身打造稳定、可控、创新的数据生产力平台,服务“看数”、“管数”、“用数”等业务场景,盘活数据资产,释放数据价值。