Ambari自定义服务开发-调试方法
[toc]
# 日志输出调试
# 代码中日志输出查看
在开发时代码中为了方便调试会需要加一些日志输出,如下代码:
from resource_management.core.logger import Logger
config = Script.get_config()
stack_root = Script.get_stack_root()
tmp_dir = Script.get_tmp_dir()
Logger.info("sync info : ")
2
3
4
5
6
在WebUI中执行时的日志:
tip: 也可以在代码中直接使用print('xxxx')进行日志输出,输出结果和上面就差一个时间,上面输出的内容去掉日志前面的时间就是print方法输出
# 终极调试方法
如果我们使用日志输出招不到日志在哪个文件,我们可以使用下面这个暴力方法,直接创建一个文件,将想要打印的日志写入进去
File(['/var/run/test/file.txt'],
mode=0644,
content='日志内容'
)
2
3
4
# 开发修改代码发布到服务器如何快速生效
常规调试的步骤是:
步骤1:卸载服务
步骤2:重启 ambari-server 进程,执行命令:ambari-server restart
步骤3:重装服务
下面针对修改每个不同的配置文件如何快速生效进行介绍:
# metainfo.xml
替换文件到 ambari-server
所在节点的 /var/lib/ambari-server/resources/stacks/HDP/3.1/services/DORIS
目录下,重启 ambari-server 后生效,无需重装所属服务。
# configuration/xxx.xml
先卸载该服务
重启 ambari-server 服务进程。
再安装该服务,这时的 configuration/xxx.xml 文件才会生效。
如果是修改 xml 文件中的已有属性<name>,重启 ambari-server 后,被修改的属性就消失了,因为之前的属性被修改了,
# package - python代码调试
- 在
ambari-server
重启的过程中,它会将common-services
和stacks/HDP
等相关的服务部署脚本分发到ambari-agent
节点的/var/lib/ambari-agent/cache
目录下。
不过stacks/HDP/\<version>/services/
目录下的服务,只会将package
目录下的文件分发下来。
然后等安装部署服务的时候,每个
ambari-agent
节点都分配了一些安装组件嘛,这时候执行的部署脚本就是用的各自节点/var/lib/ambari-agent/cache
目录下的脚本。比如DORIS
,就是执行的/var/lib/ambari-agent/cache/stacks/HDP/3.1/services/DORIS
里面的文件。知道了这种安装部署机制以后,比如你修改了
DORIS/package
下面的文件,你可以直接将文件替换到/var/lib/ambari-agent/cache/stacks/HDP/3.1/services/DORIS/package
目录下,它是实时生效的,不用重启ambari-server
和重装服务。
tip:
需要确认 package 下面的文件是哪个服务组件触发的。如果是
DORIS
这个组件用到文件,那么替换到这个组件所在节点的/var/lib/ambari-agent/cache/stacks/HDP/3.1/services/DORIS
目录下。然后就可以重启DORIS
服务组件,来看效果了。这样更节省时间。
# alerts.json
如果是修改
alerts.json
文件内容,将其替换到ambari-server所在节点的/var/lib/ambari-server/resources/stacks/HDP/3.1/services/DORIS
下。则需要重启Ambari Server
,之后,并卸载、重新安装服务,Ambari 会将新预定义的 Alert 信息保存到数据库中。如果是修改
SCRIPT
类型的 py 文件,则只需要将修改后的 py 文件放置到 告警组件所在机器的/var/lib/ambari-agent/cache/stacks/HDP/3.1/services/DORIS/package/alerts
目录下即可(以 DORIS 为例)。实时更新,不需要重启ambari-server
,大概等待一分钟后,程序刷新。
# quicklinks/quicklinks.json
将 quicklinks.json
文件替换到 ambari-server
节点的 /var/lib/ambari-server/resources/stacks/HDP/3.1/services/DORIS/quicklinks
目录下,重启ambari-server
即可生效,无需重装服务。
# widgets.json 与 metrics.json
有 widget 表会记录集群中的 widget 小部件信息,而且会随着你服务重装,这里面的信息也会越来越多。进而导致 ambari 页面上的
widget browser 里面有重复的 widget 。默认新的 widget 需要自己手动点击ADD按钮添加。
首次 widgets.json 和 metrics.json 文件上传到服务器后,仅需重启 ambari-server 即可生效。后续的 widgets.json 和 metrics.json 文件如果要修改的话,均需要重启 ambari-server 和 重装服务 才可生效。
但是,生效以后,需要在 “widget Browser” 里面手动添加最新的 widget 部件。默认,ambari 会一直展示旧的数据。这些 widget 部件信息存储在 widget 这个表中。所以需要在 “widget Browser” 里面手动添加最新的 widget 部件。
# themes/theme.json
在 ambari-server 所在主机上的自定义服务目录中替换 theme json 文件(主题文件类型是 json,需要在 metainfo.xml 中指定主题文件名称。)
重启 ambari-server 服务进程。
在 ambari 页面上,即可查看更新后的自定义服务配置样式。
tip:还是需要自己多调试,多修改看效果。
如果没有出现预期的效果,建议多看一下 主题 json 文件内容,多和 已有的主题文件作对比(比如,HBase 的 theme.json 文件)。
# rolecommandorder.json
替换 rolecommandorder.json 文件
删除该服务与依赖的服务,比如本视频示例的 ELASTICSEARCH 与 ZOOKEEPER 服务。
重启 ambari-server 服务进程。
安装服务(ELASTICSEARCH 与 ZOOKEEPER ),进行验证。