本文篇幅较长,但都是满满的干货。主要从Ambari-server详解、如何debug ambari-server源码、开发流程分析图、开发流程自定义示例四大部分入手,教读者如何玩转ambari-server
Ambari-Server是一个WEB Server,提供统一的REST API接口,同时向web和agent开放了两个不同的端口(默认前者是8080, 后者是8440或者8441)。它是由Jetty Server容器构建,通过Spring Framework构建出来的WEB服务器,其中大量采用了google提供的Guice注解完成spring框架所需要的注入功能。 REST框架由JAX-RS标准来构建。
目录 | 描述 |
---|---|
org.apache.ambari.server.api.services | 对web接口的入口方法,处理/api/v1/* 的请求 |
org.apache.ambari.server.controller | 对Ambari中cluster的管理处理,如新增host,更service、删除component等 |
org.apache.ambari.server.controller.internal | 主要存放ResourceProvider和PropertyProvider; |
org.apache.ambari.service.orm.* | 对数据库的操作 |
org.apache.ambari.server.agent.rest | 处理与Agent的接口的入口方法 |
org.apache.ambari.security | 使用Spring Security来做权限管理 |
其中,每一种Resource都对应一个ResourceProvider,对应关系如下:
Resource.Type | ResourceProvider |
---|---|
Workflow | WorkflowResourceProvider |
Job | JobResourceProvider |
TaskAttempt | TaskAttemptResourceProvider |
View | ViewResourceProvider |
ViewInstance | ViewInstanceResourceProvider |
Blueprint | BlueprintResourceProvider |
Cluster | ClusterResourceProvider |
Service | ServiceResourceProvider |
Component | ComponentResourceProvider |
Host | HostResourceProvider |
HostComponent | HostComponentResourceProvider |
Configuration | ConfigurationResourceProvider |
Action | ActionResourceProvider |
Request | RequestResourceProvider |
Task | TaskResourceProvider |
User | UserResourceProvider |
Stack | StackResourceProvider |
StackVersion | StackVersionResourceProvider |
StackService | StackServiceResourceProvider |
StackServiceComponent | StackServiceComponentResourceProvider |
StackConfiguration | StackConfigurationResourceProvider |
OperatingSystem | OperatingSystemResourceProvider |
Repository | RepositoryResourceProvider |
RootService | RootServiceResourceProvider |
RootServiceComponent | RootServiceComponentResourceProvider |
RootServiceHostComponent | RootServiceHostComponentResourceProvider |
ConfigGroup | ConfigGroupResourceProvider |
RequestSchedule | RequestScheduleResourceProvider |
我们对数据的处理就是在xxxResourceProvider.java内实现。
(1) jersy接口接收到请求,创建一个ResourceInstance实例;
(2) 解析http请求构造一个Request对象,然后交给reques的process()方法来处理;
(3) reques解析url或http_body得到一个Predicate对象;
(4) 根据http类型获取handler,GET请求对应ReadHandler;
(5) handler向Query对象中添加分页、Render、Predicate等属性后,然后让query.execute();
(6) 根据Resource.Type获得对应的ResourceProvider对象,调用其getResources方法得到Set\;
(7) 调用对应的PropertyProvider填充Resource;
(8) 处理结果,返回json结果;
ambari-server stop
java -server -Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=5005 -XX:NewRatio=3 -XX:+UseConcMarkSweepGC -XX:-UseGCOverheadLimit -XX:CMSInitiatingOccupancyFraction=60 -XX:+CMSClassUnloadingEnabled -Dsun.zip.disableMemoryMapping=true -Xms1012m -Xmx3048m -XX:MaxPermSize=256m -Djava.security.auth.login.config=/etc/ambari-server/conf/krb5JAASLogin.conf -Djava.security.krb5.conf=/etc/krb5.conf -Djavax.security.auth.useSubjectCredsOnly=false -cp /etc/ambari-server/conf:/usr/lib/ambari-server/*:/usr/share/java/mysql-connector-java-5.1.45-bin.jar org.apache.ambari.server.controller.AmbariServer
如图所示:
在你要运行的代码上打上断点,比如,我要看 http://172.16.0.142:8080/api/v1/users
,就在user的代码某流程处打上断点:
点击 debug
按钮,在XShell内输入: curl-u admin:admin http://172.16.0.142:8080/api/v1/users
,
debug模式下,这几个按钮比较常用。从上往下,从左往右描述,分别为:一键断点处、断点概览、取消全部断点、平行执行、跳入执行、跳出执行等。
当一个流程走通时,如果要关闭debug模式,只需要 Ctrl+c
终止debug进程即可。这样ambari-server也就停掉了。
以 GET /api/v1/users 为例进行。该接口用于获取所有用户。 资源请求类,一通百通。
{
href: "http://172.16.0.142:8080/api/v1/log/getAuditLog",
items: [
{
href: "http://172.16.0.142:8080/api/v1/log/getAuditLog/2",
auditlog: {
id: 2,
note: "2018-06-22T17:57:06.894-0700, User(admin), RemoteIp(172.16.0.167), Operation(User login), Roles( Ambari: 管理员 ), Status(Success)",
operation: "User login",
remoteIp: "172.16.0.167",
status: "Success",
time: "2018-06-22 17:57:06",
user: "admin"
}
},
{
href: "http://172.16.0.142:8080/api/v1/log/getAuditLog/1855",
auditlog: {
id: 1855,
note: "2018-07-12T18:51:00.846+0800, User(admin), RemoteIp(172.16.0.142), Operation(User login), Roles( Ambari: 管理员 ), Status(Success)",
operation: "User login",
remoteIp: "172.16.0.142",
status: "Success",
time: "2018-07-12 18:51:00",
user: "admin"
}
}
]
}
文章有不明白的,欢迎评论互动。
Ambari 二次开发知识库地址:https://www.yuque.com/create17/ambari
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有