Jast blog Jast blog
首页
  • 《Ambari自定义开发教程》笔记
  • 《CDH教程》笔记
  • 《ClickHouse教程》笔记
  • 《HDFS教程》笔记
  • 《DolphinScheduler教程》笔记
  • 《Hbase教程》笔记
  • 《Iceberg教程》笔记
  • 《Hive教程》笔记
  • 《Flume教程》笔记
  • 《Kafka教程》笔记
  • 《Impala教程》笔记
  • 《Hue教程》笔记
  • 《Spark教程》笔记
  • 《Flink教程》笔记
  • 《Phoenix教程》笔记
  • 《ElasticSearch教程》笔记
  • 《Kylin教程》笔记
  • 《Storm教程》笔记
  • 《Yarn教程》笔记
  • 《Presto教程》笔记
  • 《图数据库教程》笔记
  • 《Kerberos教程》笔记
  • 《Maxwell教程》笔记
  • 《MinIO教程》笔记
  • 《DataX教程》笔记
  • 《Superset教程》笔记
  • 《IOTDB教程》笔记
  • 《大数据相关》笔记
  • 《PaddleNLP教程》笔记
  • 《Nginx教程》笔记
  • 《Java技术文档》
  • 《Maven教程》笔记
  • 《IDEA使用教程》
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档

Jast-zsh

如果你知道你要去哪里,全世界都会给你让路。
首页
  • 《Ambari自定义开发教程》笔记
  • 《CDH教程》笔记
  • 《ClickHouse教程》笔记
  • 《HDFS教程》笔记
  • 《DolphinScheduler教程》笔记
  • 《Hbase教程》笔记
  • 《Iceberg教程》笔记
  • 《Hive教程》笔记
  • 《Flume教程》笔记
  • 《Kafka教程》笔记
  • 《Impala教程》笔记
  • 《Hue教程》笔记
  • 《Spark教程》笔记
  • 《Flink教程》笔记
  • 《Phoenix教程》笔记
  • 《ElasticSearch教程》笔记
  • 《Kylin教程》笔记
  • 《Storm教程》笔记
  • 《Yarn教程》笔记
  • 《Presto教程》笔记
  • 《图数据库教程》笔记
  • 《Kerberos教程》笔记
  • 《Maxwell教程》笔记
  • 《MinIO教程》笔记
  • 《DataX教程》笔记
  • 《Superset教程》笔记
  • 《IOTDB教程》笔记
  • 《大数据相关》笔记
  • 《PaddleNLP教程》笔记
  • 《Nginx教程》笔记
  • 《Java技术文档》
  • 《Maven教程》笔记
  • 《IDEA使用教程》
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
  • Ambari自定义服务开发-项目初始化
  • Ambari自定义服务开发-组件安装启动停止卸载介绍
    • 服务运行脚本
    • 安装服务(install)
    • 配置加载(configure)
    • 启动服务(start)
    • 状态监测(status)
    • 停止服务(stop)
    • 重启服务(restart)
    • 卸载服务
  • Ambari自定义服务开发-自定义服务配置文件在Ambari中的设置方法
  • Ambari自定义服务开发-自定义服务配置文件生成
  • Ambari自定义服务开发-代码如何获取配置参数
  • Ambari自定义服务开发-修改配置文件提示服务重启
  • Ambari自定义服务开发-自定义告警
  • Ambari自定义服务开发-查看历史版本配置
  • Ambari自定义服务开发-调试方法
  • Ambari自定义服务开发-执行Shell命令
  • Ambari自定义服务开发-快捷访问链接生成
  • Ambari自定义服务开发-服务组件启动顺序设置
  • Ambari自定义服务开发-服务组件安装依赖另外一个组件设置
  • Ambari自定义服务开发-监控指标Metrics介绍
  • Ambari自定义服务开发-使用客户端下载配置文件
  • Ambari自定义服务开发-美化(增强型)配置参数设置
  • Ambari自定义服务开发-自定义开发安装包整合到Ambari-Server中
  • Ambari自定义服务开发-自定义脚本运行
  • Ambari自定义服务开发-常用函数
  • Ambari自定义服务开发问题处理-中文乱码
  • Ambari自定义服务开发问题处理-告警项UNKWN
  • Ambari自定义服务开发问题处理-Agent安装服务报错unknown
  • Ambari自定义服务开发问题处理-修改源码配置,服务重启后未生效
  • 《Ambari自定义开发教程》笔记
Jast-zsh
2024-04-08
目录

Ambari自定义服务开发-组件安装启动停止卸载介绍

[toc]

# 服务运行脚本

紧接上一章节,在metainfo.xml中我们配置了需要安装的组件(FRONTEND和BACKEND),在component下的commandScript配置了服务安装、配置、启动、监听状态、停止、删除(卸载) 需要执行的函数。下面这个配置就是指定需要执行的脚本

					<commandScript>
            <script>scripts/be.py</script>
            <scriptType>PYTHON</scriptType>
            <timeout>1200</timeout>
          </commandScript>
1
2
3
4
5

be.py文件包含安装、配置、启动、监听状态、停止、删除(卸载)函数,整体结构如下

#!/usr/bin/env python
# -*- coding: utf-8 -*--

from resource_management import *
from resource_management.core.logger import Logger


class Master(Script):
    def install(self, env):
        # 在页面服务首次安装时自动执行的函数

    def configure(self, env):
        # 主要执行一些服务配置操作,该方法Ambari不会主动触发

    def start(self, env):
        # 在页面点击服务启动时自动执行的函数

    def stop(self, env):
        # 在页面点击服务停止时自动执行的函数

    def status(self, env):
      	# 检查服务状态,大概每隔60s执行一次

    def restart(self, env):
        # 当文件内没有 restart() 方法的时候,程序会在重启的时候自动执行 stop() 和 start() 方法,以实现重启命令。
        # 当有 restart() 方法时,程序会在重启的时候执行 restart() 方法逻辑

if __name__ == "__main__":
    Master().execute()


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

# 安装服务(install)

在WebUI中安装服务时,会自动触发执行install()方法,该方法一般需要实现以下几点逻辑:

  • 创建该服务的的用户(ambari2.6 需要在install()方法中添加创建用户的命令,而ambari2.7不需要,ambari2.7 可直接在 configuration 目录下的 xml 文件属性设置进行添加。)
  • 执行服务安装命令
  • 其他首次安装服务需要执行的命令

下面是简单的样例:

    def install(self, env):
        import params
        env.set_params(params)

        # 下载Doris安装包
        Execute('wget {0} -O apache-doris-2.0.2-bin-x64.tar.gz'.format(params.doris_download))

        # 将安装包解压到指定目录
        Execute('tar -zxvf apache-doris-2.0.2-bin-x64.tar.gz -C /usr/hdp/3.1.5.0-152/')

        # 删除下载的安装包
        Execute('rm -rf apache-doris-2.0.2-bin-x64.tar.gz')

        # 初始化环境变量
        cmd = format("cd {doris_scripts_dir}; chmod +x ./changeOsConf.sh && sh ./changeOsConf.sh")
        Execute(cmd)

        # 创建日志目录
        Execute(format('mkdir -p {LOG_DIR} && chown -R {doris_user}:{user_group} {LOG_DIR}'))

        # 将服务目录权限设置为doris
        Execute(format('chown -R {doris_user}:{user_group} {doris_base_dir}'))

        # 设置 pid 目录权限
        Execute(format('mkdir -p {doris_pid_dir} &&  chown -R {doris_user}:{user_group} {doris_pid_dir}'))

        Logger.info("Install complete")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

# 配置加载(configure)

configure() 方法没有被 Ambari 默认触发,这个方法一般被 install()、start()、restart() 方法主动调用执行。

该方法一般需要实现以下几点逻辑:

  • 创建相关目录,并设置权限

# 启动服务(start)

在WebUI中启动服务时,会自动触发执行start()方法,该方法一般需要实现以下几点逻辑:

  • 启动服务

# 状态监测(status)

在WebUI中我们可以看到服务状态,如下图所示

image-20240220144725424

这个状态就是通过status方法获取的,该方法每隔60s执行一次,如果status方法在执行中报错,则服务监控状态就会显示为stopped

image-20240220145058745

status比较常用的方法,是检查进程id文件是否存在,如果不存在则说明服务没有启动成功,如果存在则会检查进程id文件中的进程id是多少,判断进程id是否处于运行状态,如果进程id不存在也会显示状态为Stopped

    def status(self, env):
 
        import status_params

        env.set_params(status_params)

        # 检查进程文件和进程文件中PID在不在
        check_process_status(status_params.doris_pid_file)
1
2
3
4
5
6
7
8

status_params代码如下

from resource_management import *

config = Script.get_config()


doris_pid_dir = config['configurations']['doris-env']['doris_pid_dir'].rstrip("/")
# 获取pid文件绝对路径
doris_pid_file = format("{doris_pid_dir}/doris-fe.pid")
1
2
3
4
5
6
7
8

# 停止服务(stop)

在WebUI中停止服务时,会自动触发执行stop()方法,该方法一般需要实现以下几点逻辑:

  • 停止服务

在WebUI停止服务的是时候,在执行完stop()方法后会执行status(),如果status()能够成功执行,则一直处于停止状态中;如果status()函数执行失败则服务停止成功。

主要逻辑就是判断服务是否停止成功(进程不存在说明停止成功)

    def status(self, env):
        # Import properties defined in -env.xml file from the status_params class
        import status_params

        # This allows us to access the params.elastic_pid_file property as
        #  format('{elastic_pid_file}')
        env.set_params(status_params)
        check_process_status(status_params.doris_pid_file)
        # Use built-in method to check status using pidfile
        Logger.info("Check BE process status complete!")
1
2
3
4
5
6
7
8
9
10

tip:如果status检查进程不存在,则不会执行下面的Logger.info(...)

image-20240220174009798

如果status检查进程一直存在,则会输出

2024-02-20 19:35:18,646 - Waiting for actual component stop
2024-02-20 19:35:18,646 - Check BE process status complete!
1
2

# 重启服务(restart)

在WebUI中重启服务时,会自动触发执行restart()方法,当文件内没有 restart() 方法的时候,程序会在重启的时候自动执行 stop() 和 start() 方法,以实现重启命令。

# 卸载服务

在ambari数据库中,clusterservices表记录了服务信息,当服务卸载后,在MySQL表中则查询不到该数据。

image-20240220171914784

上次更新: 2024/04/08, 10:55:49
Ambari自定义服务开发-项目初始化
Ambari自定义服务开发-自定义服务配置文件在Ambari中的设置方法

← Ambari自定义服务开发-项目初始化 Ambari自定义服务开发-自定义服务配置文件在Ambari中的设置方法→

最近更新
01
Linux可视化监控
02-26
02
Maven私服搭建
02-26
03
当ElasticSearch时间字段设置多个格式到底是用的哪个?
01-19
更多文章>
Theme by Vdoing | Copyright © 2016-2025 Jast-zsh | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式