Ambari自定义服务开发-自定义脚本运行
[toc]
在Ambari WebUI中我们在ACTIONS
中可以运行一下检查的脚本,
这里我们介绍两种脚本:
1.服务检查脚本(安装服务后也会自动运行一次)
2.自定义脚本
# 服务检查脚本
在metainfo.xml
的<service>
标签下添加
<commandScript>
<script>scripts/service_check.py</script>
<scriptType>PYTHON</scriptType>
<timeout>1800</timeout>
</commandScript>
2
3
4
5
说明:这个配置会读取scripts目录下的service_check.py文件,并执行文件下的def service_check(self, env):
方法
创建service_check.py
文件
tip:
检查服务运行的方法必须为service_check
这里只做演示在检查方法中没有添加实际代码
from resource_management import *
from time import sleep
from resource_management.core.logger import Logger
class service_check(Script):
def service_check(self, env):
import params
env.set_params(params)
Logger.info("run service_check")
sleep(2)
Logger.info("check successfully!")
if __name__ == "__main__":
service_check().execute(
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
更新文件同步到服务器后,重启ambari-server服务,无需重新安装服务就可以在页面看到需要运行的内容
在首次安装服务的时候也会自动执行一次该方法
点击去可以看到日志,就是我们service_check
方法中打印的内容
# 自定义脚本
在页面中可以看到很多自定义脚本,可以根据我们需要去手动执行,比如:修复元数据、检查状态等等
# 前提条件
在component的category类型为MASTER时可以添加自定义脚本,为SLAVE时添加脚本在页面中也不会显示
# 添加配置
在metainfo.xml
的component
下添加customCommands
<commandScript>
<script>scripts/master.py</script>
<scriptType>PYTHON</scriptType>
<timeout>1200</timeout>
</commandScript>
<customCommands>
<customCommand>
<name>test_master_check</name>
<background>true</background>
<commandScript>
<script>scripts/master.py</script>
<scriptType>PYTHON</scriptType>
</commandScript>
</customCommand>
<customCommand>
<name>test_master_check2</name>
<background>true</background>
<commandScript>
<script>scripts/master.py</script>
<scriptType>PYTHON</scriptType>
</commandScript>
</customCommand>
<customCommand>
<name>test_master_check3</name>
<background>true</background>
<commandScript>
<script>scripts/master.py</script>
<scriptType>PYTHON</scriptType>
</commandScript>
</customCommand>
<customCommand>
<name>test</name>
<background>true</background>
<commandScript>
<script>scripts/test.py</script>
<scriptType>PYTHON</scriptType>
</commandScript>
</customCommand>
</customCommands>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
tip:
customCommands
里的script
指定的脚本必须和component.commandScript.script
相同。如果不相同执行则会报错
在master.py中添加指定方法
这里添加的方法名与metainfo.xml配置的名称要相同
...
class Master(Script):
def test_master_check(self, env):
import params
env.set_params(params)
Logger.info("run test_master")
sleep(2)
Logger.info("check successfully!")
def test_master_check2(self, env):
import params
env.set_params(params)
Logger.info("run test_master")
sleep(2)
Logger.info("check successfully!")
def test_master_check3(self, env):
import params
env.set_params(params)
Logger.info("run test_master")
sleep(2)
Logger.info("check successfully!")
...
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
更新文件同步到服务器后,重启ambari-server服务,无需重新安装服务就可以在页面看到需要运行的内容
运行后可以看到执行的日志
# 相关演示代码
https://download.csdn.net/download/zhangshenghang/88913129 (opens new window)