ambari的Command介紹
阿新 • • 發佈:2019-02-04
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 params
在params.py中
config = Script.get_config()
和在其他生命週期函式內獲得的config字典
是不一樣的,比如在:
def install(self, env):
def configure(self, env):
def start(self, env):
def stop(self, env):
通過:
import params
在params.py中
config = Script.get_config()
EXECUTION_COMMAND:
STATUS_COMMAND:
所以,官方推薦的規範寫法:
# 狀態
def status(self, env):
import status_params
# 其他生命週期,比如配置
def configure(self, env):
import params
即通過 status_params.py
和 params.py
兩個指令碼來控制不同命令接收到的不同的config字典。