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.

这些命令可以在agent机器上查看到,比如可在这里查看:

 /var/lib/ambari-agent/data/command-xx.json
 /var/lib/ambari-agent/data/status_command.json

Command: 执行态的Task,由server下发给具体的机器(agent)执行。主要有以下几种:

ExecuteCommand: 对服务组件执行INSTALL/START/STOP等操作。
StatusCommand: 对服务组件执行死活检查(由Server定期下发)。
CancelCommand: 取消其他已经下发的Task(当Stage中的某个Task失败时)。
RegistrationCommand: 要求Agent向Server重新注册(当发现Server维护的心跳序号与Agent上报的不一致时)。

这里要注意在服务的生命周期中,得到的config的不同,(config类型是ConfigDictionary):

params.py:定义服务脚本使用的公共参数。
status_params.py:定义服务状态脚本使用的公共参数。

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()

和在其他生命周期函数内获得的config字典 是不一样的,比如在:

def install(self, env):
def configure(self, env):
def start(self, env):
def stop(self, env):

通过:

import paramsparams.py中
config = Script.get_config()

EXECUTION_COMMAND:
execution_command

STATUS_COMMAND:
status_command


所以,官方推荐的规范写法:

# 状态

def status(self, env):

    import status_params

# 其他生命周期,比如配置

def configure(self, env):

    import params

即通过 status_params.pyparams.py 两个脚本来控制不同命令接收到的不同的config字典。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值