Ambari-stack介绍



Ambari-stack总体介绍

  • Ambari-stack 表示hadoop某个发行版本号。比如HDP-1.0.0,在用ambari创建一个集群时,首先要通过调用restfulAPI设置stack版本号。
  • stack下包括一个或多个service,比如HDP-2.0.6下包括多个service,各自是 ZOOKEEPER,HDFS,YARN,等。
  • 单个service下通过配置service下存储的metainfo.xml来设置构成服务的component(组件)以及部署组件的部署脚本、执行组件的角色名称、部署脚本的文件名、部署脚本的语言种类等信息。
  • stack下package/script/  存放agent操作相关component(组件)的脚本,ambari-agent会依据脚本的函数名称调用脚本的相应函数。
  • stack版本号能够通过metainfo.xml设置继承关系。比如HDP-2.1继承了HDP-2.0.6的各个服务。

Ambari-stack文件夹结构

  • HDP
    • 2.0.6
      • metainfo.xml        (stack的相关信息,包含继承关系等版本号层的性质)
      • services        (该路径下存储各个服务)
        • ZOOKEEPER  
          • metainfo.xml        (里面配置了组件名称,操作组件的脚本名称。脚本的语言种类等信息)
          • configuration
            • global.xml        (服务配置,在blueprint创建集群时使用)
            • zookeeper-log4j.xml
          • package
            • scripts
              • zookeeper_server.py        (组件的操作脚本 包含安装、查询状态、开启组件、关闭组件等操作)
              • zookeeper_cilent.py
              • ...
            • templates        (在部署时脚本里所用到的模板文件)
              • ...
        • YARN
          • ...
        • HDFS
          • ...

          • ...
      • hooks        (在调用脚本前须要运行的脚本。比如为集群各个服务创建linux-user)
        • ... 
      • repos        (yum安装所须要的repos配置信息)
        • ...
  • 当写创建好stack后。须要重新启动ambari-server。能够在浏览器中通过restfulAPI来查看stack创建是否成功。

    • http://<ambari-server>:8080/api/v1/stacks
  • 对于服务下的metainfo.xml一定要保证格式、内容的正确性,假设ambari不能正常读取,那将识别不出stack的信息。

Ambari-stack 脚本编写规则介绍

  • Ambari-agent在运行脚本时,会依据脚本的函数名进行调用。

    下面是基本操作函数。

  • 实现方式是一个组件建一个类,该类能够继承ambari提供的父类Script。该父类提供了一些默认方法比如状态检查,转换json等方法。

  • install()

    • 在调用ambari-server安装相应服务的restapi时,ambari-server会给ambari-agent发送command-json格式的文件,agent会调用脚本中名为install()函数来进行部署。

    • 函数作用在于在集群内部署该服务的相应组件。

  • start()

    • 函数作用是开启该服务下相应组件。

    • 注意:该方法须要在install成功后调用。
  • stop()

    • 该函数作用是停止该服务下的相应组件。
    • 注意:该方法调用的api与install同样且组件状态为STARTED。
  • status()

    • 在组件开启后。agent会不断检測组件的状态,并把状态通过心跳汇报给server端,server端收到心跳状态后更新当前集群的服务信息,当用户调用install api来停止组件时,server依据更新后的组件信息来向相应的host发出命令,假设某组件异常终止。那么server在发送停止命令时不会向异常终止的组件所在的agent发送停止命令。

    • status()状态检查能够使用父类提供的一种方式,check_process_status(file_path)。该函数针对提供的文件路径检查相应文件内部的组件进程号是否存在。假设不存在,那么agent就通过心跳汇报给server。
  • main()
    • 操作脚本的main函数直接调用父类的execute()函数就可以。

原文地址:https://www.cnblogs.com/jhcelue/p/6748435.html