Ambari 常用的 REST API 介紹
5.10 Ambari 常用的 REST API 介紹
5.10.1透過 API 解除安裝已安裝的 Service
目前 Ambari 不支援在 GUI 上面解除安裝已安裝的 Service。所以當一個 Service 不再需要的時候,使用者沒法刪除掉該 Service。幸運的是 Ambari 提供了 DELETE 的 Rest API,我們可以透過該 API 來刪除 Ambari 中 Service。不過這裡需要注意,這個方法只是從 Ambari Service 中刪除了 Service。這樣一來,Ambari 的 GUI 介面中不再顯示這個 Service。但是 Service 本身還安裝在 Agent 所在的機器。如果使用者需要徹底的清除掉這個 Service,仍需要手工的到每個機器解除安裝(例如,在每個機器執行 yum erase)。
這裡我以刪除 Storm 為例。解除安裝之前,需要確認是否停掉了該 Service。我們透過 GET 方法來得到這個結果(這裡當然也可以直接從 GUI 上面看到 Service 狀態)。具體的命令如下:
curl -u admin:admin -H "X-Requested-By: ambari" -X GET
命令中的 zwshen86 為 Ambari Server 的機器名(埠預設為 8080),bigdata 為 cluster 名字,STORM 為 Service 的名字。
在返回的報文中,可以看到 State 欄位。如果是 INSTALLED,代表這個 Service 已經是停掉的狀態。我們可以繼續刪除步驟。如果不是 INSTALLED,則需要先停掉這個 Service,可以從 WEB 上操作,也可以用 Rest API。
圖 17. Get 返回的結果
用 Rest API 停掉 Service 的命令格式如下,有興趣的朋友可以嘗試一下。
curl -u admin:admin -H "X-Requested-By: ambari" -X PUT -d '{"RequestInfo":
{"context":"Stop Service"},"Body":{"ServiceInfo":{"state":"INSTALLED"}}}'
執行如下命令刪除 STORM:
curl -u admin:admin -H "X-Requested-By: ambari" -X
DELETE
執行完成後,Storm 就從 Ambari 的 Service 裡面刪掉了,但是 Storm 的 package 還存在於機器。
圖 18. Storm 的 RPM 包
如果需要徹底清除掉 Storm 的 package,則需要到各個 Agent 機器執行如下命令。
yum erase“storm_2_2*”
執行完後,這個 Service 就被徹底的清除掉了。
5.10.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
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
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
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
5.10.3透過 API 執行 Service 的命令
這裡,我們以呼叫 API 執行 Service Check 為例。首先需要知道命令的名字,這裡每個 Service 的 Check 命令也是不同的。不過 Service Check 是 build-in 的命令,所以有一定的格式可循。
格式大致如下:
NAME_SERVICE_CHCECK
只要將 NAME 替換成對應的 Service,就是該 Service 的 Check 命令。以 YARN 為例,執行如下的命令。
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"}]}'
執行完後,可以發現在 WEB GUI 上面,就多了一個正在進行的 Operation。如下圖:
圖 19. Service Check 執行進度
在這裡我們可以發現,這個 Operation 的名字其實就是 context 欄位的值。我們在 WEB GUI 上面直接點選 Service Check 的時候,Operation 的名字其實是 JS code 中指定了一個特殊 context。
這裡我們也可以指定執行自定義命令(Custom Comand)。以給 Resource Manager 新增的 GetMem 為例。執行如下的命令。
curl -u admin:admin -H "X-Requested-By: ambari" -X POST -d '
{"RequestInfo":{"context":"Get RM host Mem
Usage","command":"GetMem"},"Requests/resource_filters":[{"service_name":
"YARN","component_name":"RESOURCEMANAGER","hosts":"zwshen86.eng.platformlab.ibm.com"}]}'
WEB GUI 的顯示如下
圖 20. 自定義命令 GetMem 的執行進度
跟 Service Check 相比,不難看出其中的差異。對於自定義命令,我們需要指定引數 Component 以及 Host。當這兩個引數缺失的時候,Ambari 是不會接受這個請求的。
透過這三個簡單例項,就可以體會到 Ambari Rest API 的作用。在 Rest API 的基礎上,就算脫離了 WEB,我們也可以很好地控制 Ambari。當然,我們也不得不記住很多生澀的引數。因此,大多情況下,只有當 Ambari 的 GUI 不足以完成需求,或者不期望暴露在 GUI 上面的時候,就可以使用 Rest API。有興趣的讀者可以搜尋下 Ambari Server 目錄所有的 Python 指令碼,其實 Ambari 自身很多地方都在用 curl 呼叫 Rest API。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7490392/viewspace-2084850/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Jenkins 常用 REST API介紹(Java 客戶端)JenkinsRESTAPIJava客戶端
- 常用 API 演算法介紹API演算法
- QTreeView使用總結2,常用API介紹QTViewAPI
- elasticsearch常用請求介面Rest API示例ElasticsearchRESTAPI
- Jenkins api 介紹JenkinsAPI
- Web API的簡史介紹WebAPI
- rest apiRESTAPI
- 常用鎖原理的介紹(上)
- SpringMvc的常用註解介紹SpringMVC
- BookKeeper 介紹(3)--APIAPI
- Phabricator Conduit API介紹UIAPI
- ChatGPT API使用介紹ChatGPTAPI
- Kubernetes Gateway API 介紹GatewayAPI
- etcd 常用操作介紹
- Flutter 常用 Widget 介紹Flutter
- JavaScript常用物件介紹JavaScript物件
- linux常用指令介紹Linux
- Web Storage API的介紹和使用WebAPI
- GraphQL API vs REST APIAPIREST
- Java常用的5大框架介紹!Java框架
- RESTful api風格介紹RESTAPI
- Java Stream API groupingBy()介紹JavaAPI
- SOLIDWORKS API詳細介紹SolidAPI
- SQL Azure REST API與StreamInsight雲工具簡介RYSQLRESTAPI
- oracle常用函式介紹Oracle函式
- logstash常用外掛介紹
- rematch常用外掛介紹REM
- Flutter 常用功能介紹Flutter
- DNS常用術語介紹DNS
- HTML常用標籤介紹HTML
- SpringCloud-常用元件介紹SpringGCCloud元件
- react16.7.0-alpha hooks的api介紹ReactHookAPI
- Linux常用的監控軟體介紹!Linux
- Hive的基本介紹以及常用函式Hive函式
- linux常用的幾個系統介紹Linux
- [譯] 谷歌:Wake Lock API 介紹谷歌API
- javassist庫介紹__API詳解JavaAPI
- java .stream(). 使用介紹 Streams APIJavaAPI
- Spark REST API & metricsSparkRESTAPI