Ambari 生命周期

Ambari 生命周期

    • 生命周期
      • 生命周期概述
      • install()
      • configure()
      • start()
      • status()
      • restart()
      • 删除

生命周期

生命周期概述

Ambari 自定义服务的生命周期主要有 : 安装、配置、启动、监听状态、停止、删除(卸载)操作
metainfo.xml文件中,在 :标签下有 , 该标签指定了该组件要运行使用的 Python 文件

<components>
  <component>
    <name>NAMENODEname>
    <displayName>NameNodedisplayName>
    <category>MASTERcategory>
    <cardinality>1-2cardinality>
    
    <commandScript>
      <script>scripts/namenode.pyscript>
      <scriptType>PYTHONscriptType>
      <timeout>1800timeout>
    commandScript>
  component>
components>

Python :

import sys

from resource_management.libraries.script.script import Script

class NameNode(Script):
    # 服务安装
    def install(self, env):
        print 'Install the Sample Srv Master';
        
    # 服务停止
    def stop(self, env):
        print 'Stop the Sample Srv Master';
        
    # 服务启动
    def start(self, env):
        print 'Start the Sample Srv Master';
        
    # 状态检测
    def status(self, env):
        print 'Status of the Sample Srv Master';
        
    # 自定义方法
    def configure(self, env):
        print 'Configure the Sample Srv Master';
        
    # 服务重启
    def restart(self, env):
        print 'Restart the Sample Srv Master';

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

install()

经常处理的逻辑 :

  • 创建运行服务的所属用户 ( ambari2.6 需要在 instal() 方法中添加创建用户的命令,ambari2.7 可直接在 configuration 目录下的 xml 文件属性设置进行添加 )
  • 通过 yum 的方式来安装服务;或通过 wget 的方式来下载解压服务安装包

configure()

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

configure() 方法 : 执行服务配置、设置目录用户组等相关逻辑

  • 创建一些相关目录 ( 如 : 安装目录、日志目录、数据目录、pd目录等 ) ,并设置好目录的用户用户组
  • 支持更改服务配置

start()

经常处理的逻辑 :

  • 调用 configure() 方法
  • 启动服务

status()

通常在 status() 方法中,会使用 resource_management 模块里的 check_process_status() 来判断服务的状态,check process status() 通过检测一个 pid 文件里面的进程号,来判断服务的启动状态。通常 pid 文件内只有一个进程号,如 : 8848

status()方法 :

from resource_management import

def status(self, env):
    import status_params
    env.set_params(status_params)
    check_process_status(status_params.elastic_pid_file)

动态获取 Ambari 页面上的 elastic_pid_dir 配置项,然后拼凑成一个 pid 文件路径,该 pid 文件内容只有elasticsearch组件的进程号 , 然后通过check process statu()来检测这个 pid 文件里面的进程号
status_params.py 文件 :

from resource_management.libraries.script.script import Script

config = Script.get_config()

elastic_pid_dir = config['configurations']['elastic-env']['elastic_pid_dir'].rstrip("/")
elastic_pid_file = format("{elastic_pid_dir}/elasticsearch.pid")

服务安装后,大约每隔 60s 会执行 status() 方法。如果执行 status() 方法的过程中报错,则在 Ambari 页面上会显示服务已停止。当执行 status() 方法的过程中没报错,则在 Ambari 页面上显示服务正常

restart()

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

删除

ambari server 配置的数据库里面有个表 : clusterservices ,里面存放着已安装服务的相关数据

Ambari 生命周期_第1张图片

删除(卸载)应用的话,删除以后,数据表中的 service name的该应用的数据就会被删除,这只是删除数据库中的数据 , 服务相关的实际的目录文件还是一直存在的

你可能感兴趣的:(Ambari,ambari,hadoop,python,大数据,架构)