Hadoop - Ambari叢集管理剖析

哥不是小蘿莉發表於2015-12-21

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配置在一起使用,否則會對叢集帶來異常。如下圖為筆者在跳板機的部分截圖:

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

  等待起完成即可。

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傳送的心跳請求。官方給出的架構圖如下所示:

4.1 Ambari-agent

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

  • 採集所在節點的資訊並且彙總傳送心跳給ambari-server
  • 處理ambari-server的響應請求

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

  • MessageQueue:包含節點狀態資訊(註冊資訊等)和執行結果資訊,並且彙總後通過心跳傳送給ambari-server
  • ActionQueue:用於接收ambari-server返回過來的狀態操作,然後能通過執行器按序呼叫puppet或python指令碼等模組完成任務

  架構圖如下所示:

4.2 Ambari-server

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

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

  其架構圖如下所示:

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

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

5.總結

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

6.結束語

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

相關文章