大家好,我是create17,见字如面。
今天给大家聊聊一个学员朋友遇到的 Ambari 自定义集成服务的问题。
希望我接下来的分享给大家带来一些帮助和启发🤔
学员集成 DS 服务,在部署时发现,服务只执行了安装操作,没有启动操作,如下图所示:
首先,我怀疑造成问题的原因可能是服务组件的类别(category)被设置为 CLIENT,因为客户端通常只会执行 install() 方法。但经过进一步确认,我发现 category 实际被设置为 MASTER,这意味着它应该执行 start() 方法。
接下来,我查看了学员发送给我的集成服务源码。在仔细审查代码后,我注意到 python 执行文件中的 status() 方法并没有包含真正执行的代码。具体问题如附图所示:
status() 方法修改如下:
check_process_status() 函数是 Ambari Python 类库中的一部分,它接受一个文件路径作为参数,该文件中记录了服务的进程 ID (pid)。这个函数的工作原理是检查指定的 pid 是否存在于系统中。如果 pid 不存在,表明服务没有运行,此时函数会抛出一个异常,通知 Ambari 页面该服务处于停止状态。
为了测试这一点,我故意指定了一个不存在的 pid 文件路径。结果是,在服务部署完成后,Ambari 页面上显示的服务状态为停止。
如下图所示,展示了 check_process_status() 函数的具体内容。
修改以后,果然服务安装部署时,就有了 start 步骤了。如下图所示:
解决了以后,立马反馈修改办法: