Hadoop - Ambari集群管理剖析


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.結束語

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM