日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ambari 维护模式及reset API 操作

發(fā)布時間:2024/10/12 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ambari 维护模式及reset API 操作 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Ambari 的維護模式(Maintenance Mode)介紹 Ambari 提供的 Maintenance Mode,是為了讓用戶在調(diào)試或者維護 Service 的時候,抑制不必要的告警(Alert)信息,以及避免批量操作的影響。對 Maintenance Mode 來說,有幾個不同級別的設(shè)置,分別是 Service Level,Host Level,以及 Component Level。三種級別之間存在著覆蓋關(guān)系。下面我會舉幾個例子來詳細說明 Maintenance Mode 的應(yīng)用場景。另外注意,在 Ambari 的 WEB GUI 上面會用一個照相機的圖標,標記打開 Maintenance Mode 的模塊、機器或者 Service。 Component Level(模塊級別) 在 Component 頁面里,如果用戶對某一個 Component(模塊)打開了維護模式,對該模塊會有兩種影響。其一,對于該機器的該模塊不再受批量操作的控制;其二,抑制該機器該模塊告警信息的產(chǎn)生。 例如,對機器 zwshen86 的 DataNode 模塊打開維護模式,那么當用戶從 Host Action 中關(guān)閉所有 DataNode 的時候,該機器的 DataNode 就不會被關(guān)閉。這是因為關(guān)閉 DataNode 的批量操作會直接越過 zwshen86。圖 10 中可以看到 zwshen86 不在執(zhí)行的序列。并且 zwshen86 的 DataNode 不會產(chǎn)生任何新的告警。 圖 9. 確認批量操作頁面
<ignore_js_op>?
圖 10. 關(guān)閉 DataNode 進度頁面
<ignore_js_op>?
Host Level(機器級別) 對 Host 級別的維護模式來說,就是打開了該機器所有模塊的維護模式。操作起來也很簡單,在 Hosts 頁面中勾選完機器,然后在 Host Actions 里面選擇“Turn On Maintenance Mode”即可。如果該機器已經(jīng)有告警信息,當 Maintenance Mode 打開后,告警信息會被屏蔽,并且抑制新告警信息的產(chǎn)生。所有的批量操作都會越過該機器。 圖 11. Host 打開 Maintenance Mode 之前
<ignore_js_op>?
圖 12. Host 打開 Maintenance Mode 之后
<ignore_js_op>?
Service Level(服務(wù)級別) 對 Service 級別的維護模式來說,就是打開一個 Service 所有 Component 的維護模式。由于 Service 可能部署在多臺機器,也就相當于用戶在多個機器打開 Service Component 的維護模式。這樣一來,這個 Service 就不會產(chǎn)生任何新的告警。當用戶重啟集群所有 Service 的時候,該 Service 會越過這個批量操作。當用戶重啟一個機器的所有 Component 的時候,該 Service 的 Component 也會被越過。下圖是對 HDFS 打開維護模式的示例。 圖 13. Service 打開 Maintenance Mode 之前
<ignore_js_op>?
圖 14. Service 打開 Maintenance Mode 之后
<ignore_js_op>?


Ambari 應(yīng)用舉例(快速搭建 Spark on YARN 的集群) HDP2.2 的 Stack 已經(jīng)支持了 Spark。但是 metainfo 中的版本還是 1.2.1,這個版本已經(jīng)很老了(Spark1.4.0 已經(jīng)發(fā)布)。目前安裝的 Ambari 2.0.1 和 HDP 2.2 的 Stack,很多時候也無法正常的安裝 Spark。原因在于 HDP 的 repository 文件無法找到 Spark 的安裝包。用戶可以在搭建好的 Ambari 環(huán)境中,登錄到任一個 Agent 機器,執(zhí)行如下的命令。 [Plain Text]?純文本查看?復(fù)制代碼 ?
1 yum list | grep spark

如果看不到 Spark 的 rpm 包,就代表無法正常的通過 Ambari 建立 Spark 集群。用戶可以到 HortonWorks 的 repository 服務(wù)器上下載最新 HDP 2.2 的更新 repo 文件。我的下載的 repo 內(nèi)容如下: #VERSION_NUMBER=2.2.4.4-16 [Plain Text]?純文本查看?復(fù)制代碼 ?
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 [HDP-2.2.4.4] name=HDP Version - HDP-2.2.4.4 baseurl=http://public-repo-1.hortonworks.com/HDP/centos6/2.x/updates/2.2.4.4 gpgcheck=1 gpgkey=http://public-repo-1.hortonworks.com/HDP/centos6/2.x/updates/2.2.4.4/ ??????????????????????????????????????????RPM-GPG-KEY/RPM-GPG-KEY-Jenkins enabled=1 priority=1 [HDP-UTILS-1.1.0.20] name=HDP Utils Version - HDP-UTILS-1.1.0.20 baseurl=http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6 gpgcheck=1 gpgkey=http://public-repo-1.hortonworks.com/HDP/centos6/2.x/updates/2.2.4.4/ ????????????????????????????????????????RPM-GPG-KEY/RPM-GPG-KEY-Jenkins enabled=1 priority=1

將上面的內(nèi)容拷貝到 Agent 機器的 HDP_up.repo 中,并放入文件夾/etc/yum.repos.d(不能復(fù)制到已有 HDP.repo 中,否則會被覆蓋掉),就可以通過 yum list 看到 Spark 的 rpm 包了。在 Github 中,我們可以發(fā)現(xiàn) HDP2.3 已經(jīng)配置 Spark 的版本為 1.3.1 了。 圖 15. HDP2.3 已經(jīng)配置 Spark 的 1.3.1 版本
<ignore_js_op>?
了解了以上的背景知識,就可以開始在 Ambari 上增加 Spark 這個 Service 了(這里只簡單說明,具體的 Add Service 步驟,可以閱讀《Ambari——大數(shù)據(jù)平臺的搭建利器》)。 如果之前了解過 Spark,就會發(fā)現(xiàn) Ambari 部署的 Spark 集群的模式是 Spark on YARN。這也是為什么在 Add Spark 的時候,Ambari 會提示要選擇依賴的 YARN。下圖是 Ambari、YARN 與 Spark 的層級結(jié)構(gòu)。 圖 16. Ambari&YARN&park 結(jié)構(gòu)示意圖
<ignore_js_op>?
搭建好 Spark 之后,我們就可以在 Ambari 的 Dashboard 看到 Spark 的 Service。

Ambari 常用的 REST API 介紹 Ambari 借鑒了很多成熟分布式軟件的 API 設(shè)計。Rest API 就是一個很好地體現(xiàn)。通過 Ambari 的 Rest API,可以在腳本中通過 curl 維護整個集群。并且,我們可以用 Rest API 實現(xiàn)一些無法在 Ambari GUI 上面做的操作。下面是一些實例。 實例 1,通過 API 卸載已安裝的 Service 目前 Ambari 不支持在 GUI 上面卸載已安裝的 Service。所以當一個 Service 不再需要的時候,用戶沒法刪除掉該 Service。幸運的是 Ambari 提供了 DELETE 的 Rest API,我們可以通過該 API 來刪除 Ambari 中 Service。不過這里需要注意,這個方法只是從 Ambari Service 中刪除了 Service。這樣一來,Ambari 的 GUI 界面中不再顯示這個 Service。但是 Service 本身還安裝在 Agent 所在的機器。如果用戶需要徹底的清除掉這個 Service,仍需要手工的到每個機器卸載(例如,在每個機器執(zhí)行 yum erase)。 這里我以刪除 Storm 為例。卸載之前,需要確認是否停掉了該 Service。我們通過 GET 方法來得到這個結(jié)果(這里當然也可以直接從 GUI 上面看到 Service 狀態(tài))。具體的命令如下: [Plain Text]?純文本查看?復(fù)制代碼 ?
1 2 curl -u admin:admin -H "X-Requested-By: ambari" -X GET ???http://zwshen86:8080/api/v1/clusters/bigdata/services/STORM

命令中的 zwshen86 為 Ambari Server 的機器名(端口默認為 8080),bigdata 為 cluster 名字,STORM 為 Service 的名字。 在返回的報文中,可以看到 State 字段。如果是 INSTALLED,代表這個 Service 已經(jīng)是停掉的狀態(tài)。我們可以繼續(xù)刪除步驟。如果不是 INSTALLED,則需要先停掉這個 Service,可以從 WEB 上操作,也可以用 Rest API。 圖 17. Get 返回的結(jié)果
<ignore_js_op>?
用 Rest API 停掉 Service 的命令格式如下,有興趣的朋友可以嘗試一下。 [Plain Text]?純文本查看?復(fù)制代碼 ?
1 2 3 curl -u admin:admin -H "X-Requested-By: ambari" -X PUT -d '{"RequestInfo": ????????{"context":"Stop Service"},"Body":{"ServiceInfo":{"state":"INSTALLED"}}}' ????????http://AMBARI_SERVER_HOST:8080/api/v1/clusters/c1/services/SERVICE_NAME

執(zhí)行如下命令刪除 STORM: [Plain Text]?純文本查看?復(fù)制代碼 ?
1 2 curl -u admin:admin -H "X-Requested-By: ambari" -X DELETE? http://zwshen86:8080/api/v1/clusters/bigdata/services/STORM

執(zhí)行完成后,Storm 就從 Ambari 的 Service 里面刪掉了,但是 Storm 的 package 還存在于機器。 圖 18. Storm 的 RPM 包
<ignore_js_op>?
如果需要徹底清除掉 Storm 的 package,則需要到各個 Agent 機器執(zhí)行如下命令。 [Plain Text]?純文本查看?復(fù)制代碼 ?
1 yum erase“storm_2_2*”

執(zhí)行完后,這個 Service 就被徹底的清除掉了。 實例 2,獲取 Service 的 Component 和 Host 列表 上個實例中,讓用戶登錄到每個機器去執(zhí)行 yum 卸載安裝包,其實是不太現(xiàn)實的。一般我們會寫一個腳本先通過 curl 調(diào)用 GET 方法,先獲取到 Service 的 Component 列表,然后再調(diào)用 GET 方法,獲取 Component 的機器列表,接著調(diào)用 DELETE 從 Ambari 中刪除 Service。最后腳本通過 SSH 登錄到各個 Agent 機器上執(zhí)行 yum 卸載安裝包。腳本示例代碼如下(該腳本只能在 Ambari Server 上執(zhí)行,因為 Ambari Server 有無密碼登錄所有 Agent 機器的權(quán)限)。 [Plain Text]?純文本查看?復(fù)制代碼 ?
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 #!/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 執(zhí)行 Service 的命令 這里,我們以調(diào)用 API 執(zhí)行 Service Check 為例。首先需要知道命令的名字,這里每個 Service 的 Check 命令也是不同的。不過 Service Check 是 build-in 的命令,所以有一定的格式可循。 格式大致如下: [Plain Text]?純文本查看?復(fù)制代碼 ?
1 NAME_SERVICE_CHCECK

只要將 NAME 替換成對應(yīng)的 Service,就是該 Service 的 Check 命令。以 YARN 為例,執(zhí)行如下的命令。 [Plain Text]?純文本查看?復(fù)制代碼 ?
1 2 3 4 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://zwshen86:8080/api/v1/clusters/bigdata/requests

執(zhí)行完后,可以發(fā)現(xiàn)在 WEB GUI 上面,就多了一個正在進行的 Operation。如下圖: 圖 19. Service Check 執(zhí)行進度
<ignore_js_op>?
在這里我們可以發(fā)現(xiàn),這個 Operation 的名字其實就是 context 字段的值。我們在 WEB GUI 上面直接點擊 Service Check 的時候,Operation 的名字其實是 JS code 中指定了一個特殊 context。 這里我們也可以指定執(zhí)行自定義命令(Custom Comand)。以給 Resource Manager 添加的 GetMem 為例。執(zhí)行如下的命令。 [Plain Text]?純文本查看?復(fù)制代碼 ?
1 2 3 4 5 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"}]}' ???http://zwshen86:8080/api/v1/clusters/bigdata/requests

WEB GUI 的顯示如下 圖 20. 自定義命令 GetMem 的執(zhí)行進度
<ignore_js_op>?
跟 Service Check 相比,不難看出其中的差異。對于自定義命令,我們需要指定參數(shù) Component 以及 Host。當這兩個參數(shù)缺失的時候,Ambari 是不會接受這個請求的。 通過這三個簡單實例,就可以體會到 Ambari Rest API 的作用。在 Rest API 的基礎(chǔ)上,就算脫離了 WEB,我們也可以很好地控制 Ambari。當然,我們也不得不記住很多生澀的參數(shù)。因此,大多情況下,只有當 Ambari 的 GUI 不足以完成需求,或者不期望暴露在 GUI 上面的時候,就可以使用 Rest API。有興趣的讀者可以搜索下 Ambari Server 目錄所有的 Python 腳本,其實 Ambari 自身很多地方都在用 curl 調(diào)用 Rest API。
Ambari 的發(fā)展 我們可以到 Ambari 的 Roadmap 頁面查看 Ambari 最新 release 的進展,以及未來 Ambari 將會開發(fā)怎樣的功能。例如現(xiàn)在的 Ambari Server 是存在單點問題的,如果 Server 機器宕機了,就無法恢復(fù)整個 Ambari Server 的數(shù)據(jù),也就是說無法再通過 Ambari 管理集群。我們可以從 Ambari 的 Roadmap 中看到,Ambari 未來會在 2.2 的 release 中考慮這個問題。

轉(zhuǎn)載于:https://www.cnblogs.com/shanhua-fu/p/9447405.html

總結(jié)

以上是生活随笔為你收集整理的ambari 维护模式及reset API 操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。