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://: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()函数即可。