ambari的Command介绍
ambari-server会向ambari-agent发送命令,来控制agent的行为,命令是通过agent向server发送的心跳包的response来传送的:
在agent向server注册完毕后,agent的心跳包就开始向server汇报:
Ambari Agent starts heartbeat to Ambari Server, checking for commands to execute.
- 1
这些命令可以在agent机器上查看到,比如可在这里查看:
/var/lib/ambari-agent/data/command-xx.json
/var/lib/ambari-agent/data/status_command.json
- 1
- 2
Command: 执行态的Task,由server下发给具体的机器(agent)执行。主要有以下几种:
ExecuteCommand: 对服务组件执行INSTALL/START/STOP等操作。
StatusCommand: 对服务组件执行死活检查(由Server定期下发)。
CancelCommand: 取消其他已经下发的Task(当Stage中的某个Task失败时)。
RegistrationCommand: 要求Agent向Server重新注册(当发现Server维护的心跳序号与Agent上报的不一致时)。
- 1
- 2
- 3
- 4
这里要注意在服务的生命周期中,得到的config的不同,(config类型是ConfigDictionary):
params.py:定义服务脚本使用的公共参数。
status_params.py:定义服务状态脚本使用的公共参数。
- 1
- 2
config表示agent机器上/var/lib/ambari-agent/data目录下command-*.json(对应params.py的config)或status_command.json(对应status_params.py的config)生成的map对象。
可以通过两种方式获得对应的value:
(1)default函数可以根据map内key的嵌套关系路径获取对应的value,或者返回默认值。
(2)直接通过config字典获得,config[hostname]
这里要注意的是:在def status(self, env):
函数内部如果
import params
在params.py中
config = Script.get_config()
- 1
- 2
- 3
和在其他生命周期函数内获得的config字典
是不一样的,比如在:
def install(self, env):
def configure(self, env):
def start(self, env):
def stop(self, env):
- 1
- 2
- 3
- 4
通过:
import params
在params.py中
config = Script.get_config()
- 1
- 2
- 3
EXECUTION_COMMAND:
STATUS_COMMAND:
所以,官方推荐的规范写法:
# 状态
def status(self, env):
import status_params
# 其他生命周期,比如配置
def configure(self, env):
import params
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
即通过 status_params.py
和 params.py
两个脚本来控制不同命令接收到的不同的config字典。
上一篇: 多级省市联动的代码实现 ajax实现