Ambari 常用的 REST API 介绍
源码文档路径:ambari\ambari-server\docs\api\v1
swagger风格api文档:https://www.cnblogs.com/felixzh/p/10694724.html
Ambari 借鉴了很多成熟分布式软件的 API 设计。Rest API 就是一个很好地体现。通过 Ambari 的 Rest API,可以在脚本中通过 curl 维护整个集群。
并且,我们可以用 Rest API 实现一些无法在 Ambari GUI 上面做的操作。下面是一些实例。
查询关于集群信息
[root@hadron ~]#curl -H "X-Requested-By: ambari" -X GET -u admin:admin http://192.168.1.25:8080/api/v1/clusters
{
"href" : "http://192.168.1.25:8080/api/v1/clusters",
"items" : [
{
"href" : "http://192.168.1.25:8080/api/v1/clusters/cc",
"Clusters" : {
"cluster_name" : "cc",
"version" : "HDP-2.5"
}
}
]
}
查询集群主机信息
[root@hadron ~]# curl -u admin:admin http://192.168.1.25:8080/api/v1/hosts
{
"href" : "http://192.168.1.25:8080/api/v1/hosts",
"items" : [
{
"href" : "http://192.168.1.25:8080/api/v1/hosts/anode1",
"Hosts" : {
"cluster_name" : "cc",
"host_name" : "anode1"
}
},
{
"href" : "http://192.168.1.25:8080/api/v1/hosts/anode2",
"Hosts" : {
"cluster_name" : "cc",
"host_name" : "anode2"
}
},
{
"href" : "http://192.168.1.25:8080/api/v1/hosts/anode3",
"Hosts" : {
"cluster_name" : "cc",
"host_name" : "anode3"
}
}
]
}
例1,通过 API 卸载已安装的 Service
Ambari 提供了 DELETE 的 Rest API,我们可以通过该 API 来删除 Ambari 中 Service。
不过这里需要注意,这个方法只是从 Ambari Service 中删除了 Service。这样一来,Ambari 的 GUI 界面中不再显示这个 Service。
但是 Service 本身还安装在 Agent 所在的机器。如果用户需要彻底的清除掉这个 Service,仍需要手工的到每个机器卸载(例如,在每个机器执行 yum erase)。
这里我以删除 Hbase为例。卸载之前,需要确认是否停掉了该 Service。
我们通过 GET 方法来得到这个结果(这里当然也可以直接从 GUI 上面看到 Service 状态)。
具体的命令如下:
[root@hadron ~]# curl -u admin:admin -H “X-Requested-By: ambari” -X GET http://192.168.1.25:8080/api/v1/clusters/cc/services/HBASE
停止服务
[root@hadron ~]# curl -u admin:admin -H "X-Requested-By: ambari" -X PUT -d \
> '{"RequestInfo":{"context":"Stop Service"},"Body":{"ServiceInfo":{"state":"INSTALLED"}}}'\
> 192.168.1.25:8080/api/v1/clusters/cc/services/HBASE
删除服务
[root@hadron ~]# curl -u admin:admin -H "X-Requested-By: ambari" -X \
> DELETE http://192.168.1.25:8080/api/v1/clusters/cc/services/HBASE
执行完成后,HBASE就从Ambari的Service里面删掉了,但是HBASE的package还存在于机器
如果需要彻底清除掉HBASE的 package,则需要到各个 Agent 机器执行如下命令。
yum erase “hbase_2_5*”
执行完后,这个 Service 就被彻底的清除掉了。
例 2,获取 Service 的 Component 和 Host 列表
上个实例中,让用户登录到每个机器去执行 yum 卸载安装包,其实是不太现实的。
一般我们会写一个脚本先通过 curl 调用 GET 方法,先获取到 Service 的 Component 列表,
然后再调用 GET 方法,获取 Component 的机器列表,接着调用 DELETE 从 Ambari 中删除 Service。
最后脚本通过 SSH 登录到各个 Agent 机器上执行 yum 卸载安装包。
脚本示例代码如下(该脚本只能在 Ambari Server 上执行,
因为 Ambari Server 有无密码登录所有 Agent 机器的权限)。
#!/bin/sh
GetHostList()
{
curl -u admin:admin -H "X-Requested-By: ambari" -X GET
http://$AMBARI_HOST:8080/api/v1/clusters/$CLUSTER/services/$SERVICE/components/$1
2>/dev/null |grep host_name|awk -F: '{print $2}'|sed 's/"//g' >> temp_host_list
} GetServiceComponent()
{
curl -u admin:admin -H "X-Requested-By: ambari" -X GET
http://$AMBARI_HOST:8080/api/v1/clusters/$CLUSTER/services/$SERVICE
2>/dev/null | grep "component_name" > ./temp_component_list
sed -i 's/"//g' ./temp_component_list
sed -i 's/,//g' ./temp_component_list
} if [ $# != 4 ]; then
echo "Usage: $0 Ambari_Server Cluster_Name Service_Name Package_Name"
exit 1
fi AMBARI_HOST=$1
CLUSTER=$2
SERVICE=$3
PACKAGE=$4 GetServiceComponent cat ./temp_component_list|while read line
do
COMPONENT=`echo $line|awk -F: '{print $2}'`
GetHostList $COMPONENT
done curl -u admin:admin -H "X-Requested-By: ambari" -X DELETE
http://$AMBARI_HOST:8080/api/v1/clusters/$CLUSTER/services/$SERVICE rm -f ./temp_component_list >/dev/null 2>&1
#delete duplicated lines (duplicated host name) hosts=`cat temp_host_list|sort |uniq`
for host in $hosts
do
ssh $host "yum erase $PACKAGE"
done rm -f temp_host_list >/dev/null 2>&1
例 3,通过 API 执行 Service 的命令
这里,我们以调用 API 执行 Service Check 为例。
首先需要知道命令的名字,这里每个 Service 的 Check 命令也是不同的。
不过 Service Check 是 build-in 的命令,所以有一定的格式可循。
格式大致如下:
NAME_SERVICE_CHCECK
只要将 NAME 替换成对应的 Service,就是该 Service 的 Check 命令。以 YARN 为例,执行如下的命令。
[root@hadron ~]# curl -u admin:admin -H "X-Requested-By: ambari" -X POST -d \
> '{"RequestInfo":{"context":"My YARN Service Check", "command":"YARN_SERVICE_CHECK"},"Requests/resource_filters":[{"service_name":"YARN"}]}' \
> http://192.168.1.25:8080/api/v1/clusters/cc/requests
{
"href" : "http://192.168.1.25:8080/api/v1/clusters/cc/requests/57",
"Requests" : {
"id" : 57,
"status" : "Accepted"
}
}
执行完后,可以发现在 WEB GUI 上面,就多了一个正在进行的 Operation
小结
通过这三个简单实例,就可以体会到 Ambari Rest API 的作用。
在 Rest API 的基础上,就算脱离了 WEB,我们也可以很好地控制 Ambari。
当然,我们也不得不记住很多生涩的参数。
因此,大多情况下,只有当 Ambari 的 GUI 不足以完成需求,或者不期望暴露在 GUI 上面的时候,
就可以使用 Rest API。有兴趣的读者可以搜索下 Ambari Server 目录所有的 Python 脚本,
其实 Ambari 自身很多地方都在用 curl 调用 Rest API。
Ambari 常用的 REST API 介绍的更多相关文章
- 常用ArcGIS for Silverlight 开发API介绍
1.API介绍 2.Map对象 3.Layer对象 4.Symbol对象 5.Task对象
- appium 常用api介绍(2)
前言:接着上一篇继续讲常用的一些api 参考博文:http://blog.csdn.net/bear_w/article/details/50330565 1.send_keys send_keys( ...
- SSH框架应用中常用Jar包用途介绍
struts2需要的几个jar包:1)xwork-core-2.1.62)struts2-core-2.1.83)ognl-2.7.34)freemarker-2.3.155)commons-io-1 ...
- Commons-lang API介绍
4.1 Commons-lang API介绍 4.1.1 StringUtils 4.1.2 StringEscapeUtils 4.1.3 ArrayUtils 4.1.4 DateUtils 4. ...
- APP自动化框架LazyAndroid使用手册(3)--核心API介绍
作者:黄书力 概述 在前一篇博文中,简要介绍了一款安卓UI自动化测试框架LazyAndroid (http://blog.csdn.net/kaka1121/article/details/53204 ...
- pm2常用的命令用法介绍
pm2 是一个带有负载均衡功能的Node应用的进程管理器.当你要把你的独立代码利用全部的服务器上的所有CPU,并保证进程永远都活着,0秒的重载, PM2是完美的,下面我们来看pm2常用的命令用法介绍吧 ...
- python 全栈开发,Day95(RESTful API介绍,基于Django实现RESTful API,DRF 序列化)
昨日内容回顾 1. rest framework serializer(序列化)的简单使用 QuerySet([ obj, obj, obj]) --> JSON格式数据 0. 安装和导入: p ...
- HTML5 Audio标签方法和函数API介绍
问说网 > 文章教程 > 网页制作 > HTML5 Audio标签方法和函数API介绍 Audio APIHTML5HTML5 Audio预加载 HTML5 Audio标签方法和函数 ...
- Solr系列三:solr索引详解(Schema介绍、字段定义详解、Schema API 介绍)
一.Schema介绍 1. Schema 是什么? Schema:模式,是集合/内核中字段的定义,让solr知道集合/内核包含哪些字段.字段的数据类型.字段该索引存储. 2. Schema 的定义方式 ...
随机推荐
- eclipse常用快捷键(windows下)
## eclipse常用快捷键(windows下) ## 保存 1.保存当前代码页: ctrl + s 2.保存所有代码页: ctrl + shift + s 代码补全与修正 1.代码快速修正: ct ...
- Mabits简单应用 2017.8.3
http://www.cnblogs.com/wushiqi54719880/archive/2011/07/26/2117601.html
- linux 安装python3
下载python安装包 https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tgz (可选则自己想要的版本) 下载好之后上传到linux系统,开始 ...
- 说一说js中__proto__和prototype以及原型继承的那些事
在面试中遇到过,问js如何实现继承,其实最好的方式就是构造函数+原型,今天在讨论中,发现自己以前理解上的一些误区,特地写出来,最近都比较忙,等手上的项目做完,可以来做个总结. 先说我以前没有认识到位的 ...
- 监听Web容器启动与关闭
在Servlet API 中有一个 ServletContextListener 接口,它能够监听 ServletContext 对象的生命周期,实际上就是监听 Web 应用的生命周期. 要监听web ...
- CSS技术实例1-使用CSS计数器实现数值计算小游戏实例页面
一 实例要达到的要求如图所示: 二 分析 1.7个圆角矩形标签(或按钮) 2. 点击触发并开始运算,最后一个标签显示结果 3.计算成功后弹出"万岁"字眼 三 代码实现 关键CSS代 ...
- Java单元测试初体验(JUnit4)
什么是单元测试 我们在编写大型程序的时候,需要写成千上万个方法或函数,这些函数的功能可能很强大,但我们在程序中只用到该函数的一小部分功能,并且经过调试可以确定,这一小部分功能是正确的.但是,我们同时应 ...
- SSH(Spring_SpringMVC_Hibernate)
Users实体类 package com.tao.pojo; public class Users { private int id; private String name; private Str ...
- laravel 中的rbac自己简单的实现
用户表 CREATE TABLE `sys_user` ( `id` varchar(64) COLLATE utf8_bin NOT NULL COMMENT '用户编号', `ids` int(1 ...
- 设置yum源:
1.企业 阿里开源镜像站: http://mirrors.aliyun.com/ 搜狐开源镜像站: http://mirrors.sohu.com/ 网易开源镜像站: http://mirr ...