前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ambari-server开发自定义API

ambari-server开发自定义API

作者头像
create17
修改2024-07-18 14:23:32
2K0
修改2024-07-18 14:23:32
举报
文章被收录于专栏:大数据实战演练

本文篇幅较长,但都是满满的干货。主要从Ambari-server详解、如何debug ambari-server源码、开发流程分析图、开发流程自定义示例四大部分入手,教读者如何玩转ambari-server

一、Ambari-server详解

1. 简介

Ambari-Server是一个WEB Server,提供统一的REST API接口,同时向web和agent开放了两个不同的端口(默认前者是8080, 后者是8440或者8441)。它是由Jetty Server容器构建,通过Spring Framework构建出来的WEB服务器,其中大量采用了google提供的Guice注解完成spring框架所需要的注入功能。 REST框架由JAX-RS标准来构建。

2. 目录

目录

描述

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来做权限管理

3. Resource

其中,每一种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内实现。

4. 获取数据流程

(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 Debug模式

1. 停止ambari-server服务
代码语言:javascript
复制
ambari-server stop
2. 以debug的方式来启动ambari-server
代码语言:javascript
复制
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

如图所示:

3. 在IDEA中连接Ambari-Server

在你要运行的代码上打上断点,比如,我要看 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 为例进行。该接口用于获取所有用户。 资源请求类,一通百通。

1. REST API展示形式

代码语言:json
复制
{
    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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-11-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据实战演练 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、Ambari-server详解
    • 1. 简介
      • 2. 目录
        • 3. Resource
          • 4. 获取数据流程
          • 二、Ambari-server Debug模式
            • 1. 停止ambari-server服务
              • 2. 以debug的方式来启动ambari-server
                • 3. 在IDEA中连接Ambari-Server
                • 三、开发流程分析
                • 1. REST API展示形式
                • 四、如何联系我
                相关产品与服务
                容器服务
                腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档