欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ambari的Command介绍

程序员文章站 2022-04-28 09:40: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: 
ambari的Command介绍

STATUS_COMMAND: 
ambari的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字典。

相关标签: etl