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 的定义方式 ...
随机推荐
- CSS+DIV定位分析(relative,absolute,static,fixed)
在用CSS+DIV进行布局的时候,一直对position的四个属性值relative,absolute,static,fixed分的不是很清楚,以致经常会出现让人很郁闷的结果.今天研究了一下,总算有所 ...
- 你不知道的JavaScript--Item14 使用prototype的几点注意事项
1.在prototype上保存方法 不使用prototype进行JavaScript的编码是完全可行的,例如: function User(name, passwordHash) { this.nam ...
- 『网络の转载』关于初学者上传文件到github的方法
说来也惭愧,我是最近开始用github,小白一个,昨天研究了一个下午.终于可以上传了,所以今天写点,一来分享是自己的一些经验,二来也是做个记录,万一哪天又不记得了:) 废话不多说,直接来,这次主要介绍 ...
- Java 读书笔记 (九) 运算符
短路逻辑运算符 && 当使用与逻辑运算符时,在两个操作数都为true时,结果才为true,但是当得到第一个操作为false时,其结果就必定是false,这时候就不会再判断第二个操作了. ...
- Mave手动安装jar包
今天配置Maven项目时有一个相应的jdbc驱动jar包导不进去,就自己导入了. 首先在官网上下载该jar包,地址为http://mvnrepository.com/ 点击jar下载. 用maven命 ...
- logger.go
package app //日志接口 type Logger interface { Output(maxdepth int, s string) error }
- 【链表+启发式合并】Bzoj1483 [HNOI2009] 梦幻布丁
Description N个布丁摆成一行,进行M次操作.每次将某个颜色的布丁全部变成另一种颜色的,然后再询问当前一共有多少段颜色.例如颜色分别为1,2,2,1的四个布丁一共有3段颜色. Input 第 ...
- LuoguP4234_最小差值生成树_LCT
LuoguP4234_最小差值生成树_LCT 题意: 给出一个无向图,求最大的边权减最小的边权最小的一棵生成树. 分析: 可以把边权从大到小排序,然后类似魔法森林那样插入. 如果两点不连通,直接连上, ...
- const和static readonly的区别
我们都知道,const和static readonly的确很像:通过类名而不是对象名进行访问,在程序中只读等等. 在多数情况下可以混用.二者本质的区别在于,const的值是在编译期间确定的,因此只能在 ...
- 单台PC玩转NEUTRON(一:环境准备)
要开始从事云计算网络领域的技术研究.过去10年一直是从事传统网络相关的工作,新的事务在知识结构上还有一些差异,边学边写,作为个人总结,也共享给大家. 工欲善其事必先利其器,好的开发调测环境让人学习工作 ...