刚开始debug ambari-server的时候,很多逻辑都是第一次接触。其中有很多知识点还是记录一下的好,做个备忘。这些知识点对于自定义api的开发还是很有作用的。

1. api的子href的最后一个字符串如何定义?例如,指定一个id?

解答:

ambari 2.6

编辑key_properties.json,将当前资源类型与含有id的value相映射。

举例:

ambari 2.7

路径:org/apache/ambari/server/controller/internal/RackResourceProvider.java

public static final String RACK_ID_PROPERTY_ID = PropertyHelper.getPropertyId("rack", "rack_id");
public static final String RACK_NAME_PROPERTY_ID = PropertyHelper.getPropertyId("rack", "rack_name");
public static final String RACK_HEIGHT_PROPERTY_ID = PropertyHelper.getPropertyId("rack", "rack_height");
public static final String RACK_TYPE_PROPERTY_ID = PropertyHelper.getPropertyId("rack", "rack_type");
public static final String RACK_LOCATION_PROPERTY_ID = PropertyHelper.getPropertyId("rack", "rack_location");
public static final String RACK_DESCRIPTION_PROPERTY_ID = PropertyHelper.getPropertyId("rack", "rack_description"); private static Map<Resource.Type, String> keyPropertyIds = ImmutableMap.<Resource.Type, String>builder()
.put(Resource.Type.RepositoryVersion, RACK_NAME_PROPERTY_ID)
.put(Resource.Type.Rack, RACK_ID_PROPERTY_ID)
.put(Resource.Type.User, RACK_HEIGHT_PROPERTY_ID)
.put(Resource.Type.Member, RACK_TYPE_PROPERTY_ID)
.put(Resource.Type.Task, RACK_LOCATION_PROPERTY_ID)
.put(Resource.Type.Auditlog, RACK_DESCRIPTION_PROPERTY_ID)
.build();

2. request如何取值?意义何在?

1)如何取值

QueryImpl.createRequest()方法内的requestedProperties属性与XXXResourceProvider()的keyPropertyIds有关

2)有何意义?

和rack/rack_name=rack1这样赋值有关。

3. predicate如何定义?意义何在?

1)如何定义?

QueryImpl.createPredicate() ==> QueryImpl.createInternalPredicate() ==> ClusterControllerImpl.getSchema() ==> QueryImpl.createInternalPredicate() ==>

907~914行,setPredicates() 作用就是keyPropertyIds的type与RackHostResourceProvider相比较,相同的就是predicate。

entry.getValue() 这个值会和Rackhost的value值相比较,并返回boolean值。如果为true,则合并。

Predicate 可能会有多条匹配,这样多条的entry.getValue()会与对应的Rackhost的value值比较,返回true或false。如果有一个不对应,则两个Resource.Type的数据不合并,这里被坑过,特此记录。

注:RackResourceProvider和RackHostResourceProvider的keyPropertyIds只能保证rack_name字段的key一致。

2)有何意义?

pridicate会在子数据的判断上(是否合并数据)起作用。

4. getKeyValueMap()

获取的是资源类型=>value 、、 比如: Rack ==> null

5. 编译失败,改正了以后还是报那个地方失败?

这时候就应该考虑一下 将target文件删掉,或直接mvn clean,重新生成这个文件了,可能是编译后的一些class文件没有被替换。

6. 使用fields来拼接展示不用resource类型的数据?

在RackResourceDefinition.getSubResourceDefinitions()里面注册要展示其他resource的类型,调用xxxResourceDefinition.getPluralName(),最后就可以使用fields=rack_hosts来调取数据。

org/apache/ambari/server/api/resources/RackResourceDefinition.java

org/apache/ambari/server/api/resources/RackHostResourceDefinition.java

7. api的入口

xxxService.java是api的入口,经过一系列流程操作,进入到xxxResourceProvider.java,里面有getResources()、createResources()、deleteResources()、updateResources()方法,这些方法具体实现是在AmbariManagementController.java里面定义,在AmbariManagementControllerImpl.java实现具体的操作。

持续更新中,敬请关注...


点关注,不迷路

好了各位,以上就是这篇文章的全部内容了,能看到这里的人呀,都是 人才。

白嫖不好,创作不易。 各位的支持和认可,就是我创作的最大动力,我们下篇文章见!

如果本篇博客有任何错误,请批评指教,不胜感激 !

调试 ambari-server 总结的更多相关文章

  1. IDEA远程调试Ambari Server

    1.配置端口 Ambari Server默认配置了服务端的debug参数,端口为5005.如果要修改端口,可以在/usr/sbin/ambari_server_main.py文件中对应地方修改,直接改 ...

  2. Ambari server:无法显示内存,CPU等使用率

    Ambari server安装完毕后,都能正确显示各种信息.运行了几天后,发现无法显示内存,CPU等信息. 查找日志发现有错误,日志路径:/var/log/ambari-server/ambari-s ...

  3. 使用WinDbg调试SQL Server查询

    上一篇文章我给你介绍了WinDbg的入门,还有你如何能附加到SQL Server.今天的文章,我们继续往前一步,我会向你展示使用WinDbg调试SQL Server查询需要的步骤.听起来很有意思?我们 ...

  4. 使用WinDbg调试SQL Server——入门

    这篇文章我想探究下SQL Server里完全不同的领域:如果使用WinDbg(来自针对Windows的调试工具)调试SQL Server.在我们进入枯涩细节之前,我想详细解释下为什么选择这样晦涩的话题 ...

  5. Eclipse调试cas server 3.5.2.1

    由于在配置CAS+LDAP总是报错,决定Eclipse调试cas server,跟踪问题出在哪里? ================================================== ...

  6. ambari server内存溢出

    抛出的异常信息如下: java.lang.OutOfMemoryError: PermGen space at java.lang.ClassLoader.defineClass1(Native Me ...

  7. 如何设断点????-----使用WinDbg调试SQL Server查询

    http://www.cnblogs.com/woodytu/p/4665427.html http://www.sqlservercentral.com/blogs/aschenbrenner/20 ...

  8. Ambari调整日志级别:How to enable debug logging in Ambari Server and Ambari Agent ?

    PURPOSE When troubleshooting Ambari issues, it may be necessary to enable debug logging in the Ambar ...

  9. 基于Ambari Server部署HDP集群实战案例

    基于Ambari Server部署HDP集群实战案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.部署Ambari Server端 博主推荐阅读: https://www.c ...

  10. 部署Ambari Server实战案例

    部署Ambari Server实战案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.准备三台虚拟机(需要自行安装jdk环境) 1>.角色分配 NameNode节点: h ...

随机推荐

  1. UVA - 10480 Sabotage (Dinic)

    The regime of a small but wealthy dictatorship has been abruptly overthrown by an unexpected rebel-l ...

  2. HDU - 4289 Control (Dinic)

    You, the head of Department of Security, recently received a top-secret information that a group of ...

  3. HDU6333 莫队+组合数学

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6333 题意: T次询问,每次询问n个苹果中最多拿m个苹果的方法数 题解: 因为T为1e5,所以直接做时间 ...

  4. string的常见操作

    访问 遍历 不需修改:for(auto c : s)   需要修改:for(auto &c : s)​ for(decltype(s.size()) i = 0; i < s.size( ...

  5. 图解Go里面的sync.Map了解编程语言核心实现源码

    基础筑基 在大多数语言中原始map都不是一个线程安全的数据结构,那如果要在多个线程或者goroutine中对线程进行更改就需要加锁,除了加1个大锁,不同的语言还有不同的优化方式, 像在java和go这 ...

  6. 图解leetcode279 —— 完全平方数

    每道题附带动态示意图,提供java.python两种语言答案,力求提供leetcode最优解. 描述: 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于  ...

  7. 力扣142——环形链表 II

    原题 给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始). 如果 pos ...

  8. 智能反射表面(可重构智能表面)Large Intelligent surface 最新综述整理

    闻道洛阳花正好,家家遮户春风.道人饮处百壶空.年年花下醉,看尽几番红. 此拐又从何处去,飘蓬一任西东.语声虽异笑声同.一轮清夜月,何处不相逢. ---- 临江仙·与刘拐 更多精彩内容请关注微信公众号 ...

  9. ecshop数据结构

    ecshop数据结构  2.7.2版本,数据库表 共88张表 注: 1.颜色为蓝色的字,有待讨论验证的地方. 2.颜色为红色的字,是新增的字段.(改文档是基于网上下载的老版本的数据字典修改而成,已经检 ...

  10. Jmeter-Ant 生成测试报告配置步骤

    1.配置java环境变量(不会的可以自行百度) 2.安装jmeter 3.安装ant,配置ant环境变量 4.将JMeter所在目录下extras子目录里的ant-JMeter-1.1.1.jar复制 ...