ambari的Command介绍

来源:互联网 发布:精准数据库营销 编辑:程序博客网 时间:2024/06/05 11:16

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 paramsparams.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 paramsparams.py中config = Script.get_config()
  • 1
  • 2
  • 3

EXECUTION_COMMAND: 
execution_command

STATUS_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字典。

原创粉丝点击