Hadoop - Ambari集群管理剖析

jopen 8年前發布 | 257K 次閱讀 Hadoop 分布式/云計算/大數據

1.Overview

Ambari是Apache推出的一個集中管理Hadoop的集群的一個平臺,可以快速幫助搭建Hadoop及相關以來組件的平臺,管理集群方便。這篇博客記錄Ambari的相關問題和注意事項。方便為初學者省去搭配各個社區版的煩惱。

2.How to works

在Ambari的官方WIKI上介紹了如何去使用Ambari,[ 官方文檔 ]。官方說法比較簡要,下面我補充相關注意事項,并給大家羅列一個詳細的步驟。

2.1 Env

首先,節點(物理機)需要實現準備好,這里筆者準備了5臺節點,大家可以按需選擇。所使用的系統為CentOS6.6,JDK為1.7,MySQL為5.1;另外,需要各個節點SSH面密碼登錄,關閉各個節點的防火墻,selinux置為disabled。這些環境的準備較為簡單,這里就不多贅述了。大家可以利用搜索引擎去完成。

2.2 Exception

在deploy的過程當中,會出現一些忽略的環境因素,首先是時間同步問題,在HBase集群之間需要保證時間的一致性(或是時間間隔極短),否則,時間不同步,會導致HBase集群異常,因而,這里我們可以事先將時間同步,命令如下所示:

  • 時間同步
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime  #設置時區為北京時間,這里為上海,因為centos里面只有上海
  • 定時同步(crontab -e)
0-59/10 * * * * /usr/sbin/ntpdate us.pool.ntp.org | logger -t NTP

在管理Ambari的Meta時,這里我們會使用MySQL去做存儲,因而,是需要用到MySQL的Driver的,這個在我們配置或啟動Ambari的Server會有提示,不用過早去準備(有2個位置需要用到,/usr/share/java和/usr/lib/ambari-server會需要用到該依賴包)。這里,我們可以提前將Ambari的數據庫和表在MySQL中創建,創建的腳本在/var/lib/ambari-server/resources,使用在MySQL中使用以下命令來完成,內容如下所示:

source /var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql

另外,在WebUI中,分配節點之前會對各個節點進行校驗,這里筆者在校驗過程當中出現以下異常,解決方案如下:

頁面報出以下錯誤:
The following hosts have Transparent HugePages (THP) enabled。THP should be disabled to avoid potential Hadoop performance issues.
解決辦法,在Linux下執行:
echo never >/sys/kernel/mm/redhat_transparent_hugepage/defrag
echo never >/sys/kernel/mm/redhat_transparent_hugepage/enabled
echo never >/sys/kernel/mm/transparent_hugepage/enabled
echo never >/sys/kernel/mm/transparent_hugepage/defrag
Install, setup and start Ambari server by default.
Reach "Choose services" phase of installer.
Actual result:
"Confirm hosts" shows warning that ntpd service isn't running on hosts, but it's running in console by command

service ntpd status

在啟動系統的ntpd后,最后將其設置為開機自啟。命令如下所示:

chkconfig ntpd on

在完成上述內容后,準備工作基本算是完成了,接下來的工作就是去對各個組件的集成。

3.Plugins

關于組件的選擇,大家可以按需而擇,后續若是有其他需求可以追加組件功能。節點角色的分配這里需要注意,若是要配置HA,得放在后續配置,這里得SNameNode表示Secondary NameNode,需要和NameNode配置在一起使用,否則會對集群帶來異常。如下圖為筆者在跳板機的部分截圖:

Hadoop - Ambari集群管理剖析

之后,我們需要對Hive的Meta的存儲介質進行配置,這里我們指定MySQL的地址之后,點擊Deploy進行部署,下圖為等待部署:

Hadoop - Ambari集群管理剖析

等待起完成即可。

4.Architecture

Ambari采用的并不是新的架構,只是充分利用了一些優秀的開源軟件及其思想,將其巧妙的結合,使其在分布式環境中能夠做到集群式服務管理、監控、展示等。Ambari的架構采用的是C/S模型,即:Server/Client模式,能夠集中式管理分布式集群的安裝配置及部署。Ambari除了ambari-server和ambari-agent,另外它還提供了一個界面優美的管理監控頁面ambari-web,這些頁面由ambari-server提供。ambari-server對外開放了 REST API ,這些用途有二,其一用于為ambari-web提供管理監控服務,其二用于與ambari-agent交互,接受ambari-agent向ambari-server發送的心跳請求。官方給出的架構圖如下所示:

Hadoop - Ambari集群管理剖析

4.1 Ambari-agent

ambari-agent是一個無狀態的,主要功能如下所示:

  • 采集所在節點的信息并且匯總發送心跳給ambari-server
  • 處理ambari-server的響應請求

因而,它有兩種隊列:MessageQueue和ActionQueue。

  • MessageQueue:包含節點狀態信息(注冊信息等)和執行結果信息,并且匯總后通過心跳發送給ambari-server
  • ActionQueue:用于接收ambari-server返回過來的狀態操作,然后能通過執行器按序調用puppet或python腳本等模塊完成任務

架構圖如下所示:

Hadoop - Ambari集群管理剖析

4.2 Ambari-server

而對于ambari-server來說,其是一個有狀態的,它維護著自己的一個有限狀態FSM。同時這些狀態存儲與數據庫當中(DB目前可以支持多種,可按序自選),Server端主要維持三類狀態:

  • Live Cluster State:集群現有狀態,各個節點匯報上來的狀態信息會更改該狀態
  • Desired State:使用者希望該節點所處狀態,是用戶在頁面進行了一系列的操作,需要更改某些服務的狀態,這些狀態還沒有在節點商闡述作用
  • Action State:操作狀態,該狀態是一種中間狀態,這種狀態可以輔助Live Cluster State向Desired State狀態的轉變

其架構圖如下所示:

Hadoop - Ambari集群管理剖析

ambari-server的Heartbeat Handler模塊用于接收各個Agent的心跳請求(其中包含節點狀態信息和返回的操作結果),把節點狀態信息傳遞給圖中的FSM模塊去維護該節點的狀態,并把響應之后的操作結果信息返回給Action Manager去做更加詳細的處理。Coordinator模塊可以看作API Handler,主要在接收Web端操作請求后,校驗其合法性,Stage Planner分解成一組操作,最后提供給Action 過 Manager去完成執行操作。

因而,從上圖中,我們可以看出,ambari-server的所有狀態信息的維護和變化都會被記錄在數據庫當中,使用者做一些更改服務的操作都會在數據庫商做對應的記錄,同時,Agent通過心跳來獲取數據庫的變動歷史信息。

5.總結

在部署Ambari時,主機節點的硬件配置,內存不能過低,標準的服務器配置即可。另外,從Ambari的結構圖來看,架構雖然談不上新穎,但各個模塊職責分明,能夠充分利用優秀的開源中間件來進行組合,對于我們去涉及類似的系統具有借鑒意義。

6.結束語

這篇博客就和大家分享到這里,如果大家在研究學習的過程當中有什么問題,可以加群進行討論或發送郵件給我,我會盡我所能為您解答,與君共勉!

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!