0%

Ambari 二次开发快速部署测试方法

本文主要通过替换 class 文件的方法对 Ambari 二次开发,可以达到快速开发测试的目的。

在二次开发 Ambari 时,需要对开发的内容进行快速测试,如果使用完整的 CI 打包流程部署测试则太庞大笨重,这里介绍通过替换 class 文件的方法进行快速部署测试的方法。

环境准备

  • 一套部署好的 Ambari 环境
    这套环境已经部署好 Ambari,可正常运行,供测试使用。

  • IDE 开发工具
    这里使用 IDEA 开发工具。

  • 压缩软件
    一款压缩软件,这里使用 7-zip。

  • Postman
    最好准备一个 Postman 进行接口测试。

二次开发

比如我们修改一个类,将 org.apache.ambari.server.utils.ShellCommandUtil 类的这段代码的 process.waitFor(); 调换下位置,避免在执行大输出量的 shell 语句时造成阻塞,源代码如下:

1
2
3
4
5
6
7
//TODO: not sure whether output buffering will work properly
// if command output is too intensive
process.waitFor();
String stdout = streamToString(inputStream);
String stderr = streamToString(process.getErrorStream());
int exitCode = process.exitValue();
return new Result(exitCode, stdout, stderr);

将其修改为:

1
2
3
4
5
String stdout = streamToString(inputStream);
String stderr = streamToString(process.getErrorStream());
process.waitFor();
int exitCode = process.exitValue();
return new Result(exitCode, stdout, stderr);

然后在 IDEA 中运行 AmbariServer 主程序 org.apache.ambari.server.controller.AmbariServer,会报如下找不到日志文件的错误,这个属于正常,而且要的就是这个效果。

1
2
3
4
5
6
7
8
9
10
log4j:WARN No appenders could be found for logger (org.apache.ambari.server.utils.AmbariPath).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Exception in thread "main" java.lang.RuntimeException: ambari.properties not found in classpath
at org.apache.ambari.server.configuration.Configuration.readConfigFile(Configuration.java:2942)
at org.apache.ambari.server.configuration.Configuration.<init>(Configuration.java:2733)
at org.apache.ambari.server.controller.ControllerModule.<init>(ControllerModule.java:203)
at org.apache.ambari.server.controller.AmbariServer.main(AmbariServer.java:1074)

Process finished with exit code 1

代开 ambari-server 对应的 target 文件夹 \ambari-server\target,可以看到里面有编译好的 class 文件。

替换 class 文件

将 Ambari 测试环境中的 ambari-server-2.7.1.0.0.jar 发送到本地做修改使用,发送到本地之前最好做备份,以便回退。

1
2
cd /usr/lib/ambari-server/
cp ambari-server-2.7.1.0.0.jar ambari-server-2.7.1.0.0.jar.bak

找到修改的 class 文件

使用压缩工具直接打开 jar 包,并找到相应的包,将修改的 class 直接拖到这个包内,并同意如下弹框提示。

替换好后直接关闭这个压缩软件打开的窗口。

替换 jar 包

在 Ambari 测试环境中停止 ambari-server,删除原有 ambari-server-2.7.1.0.0.jar,替换上新的 jar 包。

1
2
ambari-server stop
rm -rf ambari-server-2.7.1.0.0.jar

开启 ambari-server,为了方便测试,这里使用 debug 模式启动,这样方便调试,具体调试方法可以参考文章:Ambari 远程 Debug 调试

1
ambari-server start --debug

测试接口

这时可以通过在 Ambari 测试环境中找到相应的界面或使用 Postman 调用接口就行调试。

总结

主要是通过替换 calss 文件修改 jar 包,达到快速开发测试的目的,其实这还是有些繁琐,改动一点儿还要编译、替换 class、替换 jar 包、启停服务等操作,有更方便的方法欢迎告知,联系方式