前言
在维护druid服务的过程中,我们的物化视图的supervisor状态总是发生异常,通过日志以及MR程序的情况来看,目前猜测是因为yarn资源问题导致的这一现状。虽然现在通过脚本监控的形式来保证物化视图supervisor异常时重新拉起而不会产生物化视图延迟(尤其是晚上发生异常)。但是不能明确为什么supervisor的执行流程。因此本着探究supervisor的心态,因为kafka-index supervisor比较成熟且经典,于是先研究下kafka-index supervisor先熟悉supervisor在代码中是一个怎样的形式存在的。
上图
先上一个启动supervisor的代码执行流程图。supervisor有一个管理器,是在启动overlord的时候创建的,即supervisor是被overlord管理的。supervisor管理器维护着druid服务中所有的supervisor服务并会将supervisor信息持久化到元数据库。overlord还会还会创建一个supervisor的资源请求入口,用于接收操作supervisor的RESTful请求。最终通过SupervisorResource的specPost方法接收创建supervisor的请求。
上代码
启动overlord服务, 执行overlord.sh 会携带overlord参数跳转到执行node.sh, 如下图是node.sh的主要执行步骤。
然后在代码中找到这个类,看一下是如何启动的?
上图中,在main函数中执行了run方法,而cli的build,获取的其实是cliov