调试 ambari-server 总结

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

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

解答:

ambari 2.6

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

举例:

调试 ambari-server 总结

调试 ambari-server 总结

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 keyPropertyIds = ImmutableMap.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有关

调试 ambari-server 总结

调试 ambari-server 总结
2)有何意义?

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

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

1)如何定义?

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

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

调试 ambari-server 总结

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

调试 ambari-server 总结

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

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

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

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

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

调试 ambari-server 总结

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

调试 ambari-server 总结

7. api的入口

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

持续更新中,敬请关注…

点关注,不迷路

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

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

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

调试 ambari-server 总结

Original: https://www.cnblogs.com/createboke/p/12234215.html
Author: CREATE_17
Title: 调试 ambari-server 总结

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/715169/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • R语言—数据基础及练习

    ## 创建leadership数据框 manager ) date "10/24/08","10/28/08","10/1/08&…

    技术杂谈 2023年7月25日
    095
  • pidstat命令详解

    pidstat命令详解 pidstat 命令是 sysstat 工具的一个命令,用来监控全部或者指定 进程的CPU、内存、线程、设备IO等系统资源的占用情况。 pidstat 首次…

    技术杂谈 2023年5月31日
    0126
  • RESTful API设计规范

    RESTful 是目前最流行的 API 设计规范,用于 Web 数据接口的设计。 它的大原则容易把握,但是细节不容易做对。本文总结 RESTful 的设计细节,介绍如何设计出易于理…

    技术杂谈 2023年5月31日
    0100
  • Zookeeper全解析——Paxos作为灵魂(转)

    原计划在介绍完ZK Client之后就着手ZK Server的介绍,但是发现ZK Server所包含的内容实在太多,并不是简简单单一篇Blog就能搞定的。于是决定从基础搞起比较好。…

    技术杂谈 2023年5月31日
    0109
  • win10任务管理器不刷新

    1. 打开 任务管理器 ,选择”性能” 我是用Ctrl+Alt+Delte打开的,可看出cpu是暂停状态 ; 2. 通过查看–>更新速度–>已暂…

    技术杂谈 2023年5月31日
    086
  • 猪齿鱼开源四周年庆典,邀您共享精彩瞬间

    520真情相遇,「猪齿鱼」与你相伴, 从此一番过往皆是你! 在这样一个充满爱与温馨的日子里,「猪齿鱼」也迎来了自己四周岁的生日。小伙伴们,让我们一起坐上时光穿梭机,回顾「猪齿鱼」的…

    技术杂谈 2023年7月23日
    090
  • 安装Harbor之http版本

    一、安装Harbor Harbor简介 Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展…

    技术杂谈 2023年5月31日
    0107
  • 使用阿里云OSS给图片添加水印

    一、需求。 1.1、Laravel下给图片添加水印; 二、分析。 2.1、给图片添加水印,一个是可以用PHP的GD库处理,Laravel下可以直接通过Composer安装别人写好的…

    技术杂谈 2023年7月11日
    091
  • target 1

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    技术杂谈 2023年7月25日
    091
  • 嵌入式软件架构设计-函数调用

    1 前言 函数调用很好理解,即使刚学没多久的朋友也知道函数调用是怎么实现的,即调用一个已经封装好的函数,实现某个特定的功能。 把一个或者多个功能通过函数的方式封装起来,对外只提供一…

    技术杂谈 2023年7月25日
    068
  • ConnectionAbortedError: [WinError 10053] An established connection was aborted by the software in your host machine

    ConnectionAbortedError: [WinError 10053] An established connection was aborted by the soft…

    技术杂谈 2023年5月30日
    0101
  • 重新学习数据库(2)

    单元概述 通过本章的学习能够了解MySQL数据库中多表查询的含义,掌握多表查询的基本写法,掌握特殊的多表查询的写法,掌握内连接和外连接的区别 测试数据脚本 drop TABLE e…

    技术杂谈 2023年6月22日
    097
  • Linux安装cmatrix代码雨教程

    一:介绍 cmatrix代码雨是Linux的系统屏保界面;执行cmatrix不仅可以练习简单的编译安装软件三部曲,还可以执行cmatrix命令做出代码雨,提升文化实力 二:成品演示…

    技术杂谈 2023年7月11日
    088
  • [转帖]smaps 使用&& 内存泄露

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    技术杂谈 2023年5月30日
    095
  • UML图

    依赖(Dependency)关系是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系。大多数情况下,依赖关系体现在某个类…

    技术杂谈 2023年5月31日
    0109
  • 汉诺塔系列问题: 汉诺塔II、汉诺塔III、汉诺塔IV、汉诺塔V、汉诺塔VI

    这个问题简单,DP:a[n]=a[n-1]+1+a[n-1],先把 上面的n-1个放在B上,把最大的放在目标C上,再把N-1个放回到C上就可以。 网上的一种最优解法例如以下:(1)…

    技术杂谈 2023年5月31日
    0139
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球