Ambari——大數據平臺的搭建利器

https://www.ibm.com/developerworks/cn/opensource/os-cn-bigdata-ambari/數據庫

 

Ambari 是什麼

Ambari 跟 Hadoop 等開源軟件同樣,也是 Apache Software Foundation 中的一個項目,而且是頂級項目。目前最新的發佈版本是 2.0.1,將來不久將發佈 2.1 版本。就 Ambari 的做用來講,就是建立、管理、監視 Hadoop 的集羣,可是這裏的 Hadoop 是廣義,指的是 Hadoop 整個生態圈(例如 Hive,Hbase,Sqoop,Zookeeper 等),而並不只是特指 Hadoop。用一句話來講,Ambari 就是爲了讓 Hadoop 以及相關的大數據軟件更容易使用的一個工具。apache

說到這裏,你們就應該明白什麼人最須要 Ambari 了。那些苦苦花費好幾天去安裝、調試 Hadoop 的初學者是最能體會到 Ambari 的方便之處的。並且,Ambari 如今所支持的平臺組件也愈來愈多,例如流行的 Spark,Storm 等計算框架,以及資源調度平臺 YARN 等,咱們都能輕鬆地經過 Ambari 來進行部署。centos

Ambari 自身也是一個分佈式架構的軟件,主要由兩部分組成:Ambari Server 和 Ambari Agent。簡單來講,用戶經過 Ambari Server 通知 Ambari Agent 安裝對應的軟件;Agent 會定時地發送各個機器每一個軟件模塊的狀態給 Ambari Server,最終這些狀態信息會呈如今 Ambari 的 GUI,方便用戶瞭解到集羣的各類狀態,並進行相應的維護。詳細的操做和介紹會在後續章節介紹。瀏覽器

Ambari 的安裝

安裝準備

關於 Ambari 的安裝,目前網上能找到兩個發行版,一個是 Apache 的 Ambari,另外一個是 Hortonworks 的,二者區別不大。這裏就以 Apache 的 Ambari 2.0.1 做爲示例。本文使用三臺 Redhat 6.6 做爲安裝環境(目前測試驗證結果爲 Ambari 在 Redhat 6.6 的版本上運行比較穩定),三臺機器分別爲 zwshen37.example.com、zwshen38.example.com、zwshen39.example.com。zwshen37 計劃安裝爲 Ambari 的 Server,另外兩臺爲 Ambari Agent。安全

安裝 Ambari 最方便的方式就是使用公共的庫源(public repository)。有興趣的朋友能夠本身研究一下搭建一個本地庫(local repository)進行安裝。這個不是重點,因此不在此贅述。在進行具體的安裝以前,須要作幾個準備工做。架構

  1. SSH 的無密碼登陸;
    Ambari 的 Server 會 SSH 到 Agent 的機器,拷貝並執行一些命令。所以咱們須要配置 Ambari Server 到 Agent 的 SSH 無密碼登陸。在這個例子裏,zwshen37 能夠 SSH 無密碼登陸 zwshen38 和 zwshen39。
  2. 確保 Yum 能夠正常工做;
    經過公共庫(public repository),安裝 Hadoop 這些軟件,背後其實就是應用 Yum 在安裝公共庫裏面的 rpm 包。因此這裏須要您的機器都能訪問 Internet。
  3. 確保 home 目錄的寫權限。
    Ambari 會建立一些 OS 用戶。
  4. 確保機器的 Python 版本大於或等於 2.6.(Redhat6.6,默認就是 2.6 的)。

以上的準備工做完成後,即可以真正的開始安裝 Ambari 了。框架

安裝過程

首先須要獲取 Ambari 的公共庫文件(public repository)。登陸到 Linux 主機並執行下面的命令(也能夠本身手工下載):ssh

1curl

wget <a href="http://public-repo-1.hortonworks.com/ambari/centos6/2.x/updates/2.0.1/ambari.repo"><code>http://public-repo-1.hortonworks.com/ambari/centos6/2.x/updates/2.0.1/ambari.repo</code></a>分佈式

將下載的 ambari.repo 文件拷貝到 Linux 的系統目錄/etc/yum.repos.d/。拷貝完後,咱們須要獲取該公共庫的全部的源文件列表。依次執行如下命令。

1

2

yum clean all

yum list|grep ambari

如圖 1 所示:

圖 1. 獲取公共庫源文件列表

圖 1. 獲取公共庫源文件列表

若是能夠看到 Ambari 的對應版本的安裝包列表,說明公共庫已配置成功。而後就能夠安裝 Ambari 的 package 了。執行下面的命令安裝 Ambari Server 到該機器。

1

yum install ambari-server

待安裝完成後,便須要對 Ambari Server 作一個簡單的配置。執行下面的命令。

1

amari-server setup

在這個交互式的設置中,採用默認配置便可。Ambari 會使用 Postgres 數據庫,默認會安裝並使用 Oracle 的 JDK。默認設置了 Ambari GUI 的登陸用戶爲 admin/admin。而且指定 Ambari Server 的運行用戶爲 root。

簡單的 setup 配置完成後。就能夠啓動 Ambari 了。運行下面的命令。

1

ambari-server start

當成功啓動 Ambari Server 以後,即可以從瀏覽器登陸,默認的端口爲 8080。以本文環境爲例,在瀏覽器的地址欄輸入 http://zwshen37.example.com:8080,登陸密碼爲 admin/admin。登入 Ambari 以後的頁面以下圖。

圖 2. Ambari 的 welcome 頁面

圖 2. Ambari 的 welcome 頁面

點擊查看大圖

至此,Ambari Server 就安裝完成了。

部署一個 Hadoop2.x 集羣

到這一節,咱們將能夠真正地體驗到 Ambari 的用武之地,以及它所能帶來的方便之處。

登陸 Ambari 以後,點擊按鈕「Launch Install Wizard」,就能夠開始建立屬於本身的大數據平臺。

第一步,命名集羣的名字。本環境爲 bigdata。

第二步,選擇一個 Stack,這個 Stack 至關於一個 Hadoop 生態圈軟件的集合。Stack 的版本越高,裏面的軟件版本也就越高。這裏咱們選擇 HDP2.2,裏面的對應的 Hadoop 版本爲 2.6.x。

第三步,指定 Agent 機器(若是配置了域,必須包含完整域名,例如本文環境的域爲 example.com),這些機器會被安裝 Hadoop 等軟件包。還記得在安裝章節中提到的 SSH 無密碼登錄嗎,這裏須要指定當時在 Ambari Server 機器生成的私鑰(ssh-keygen 生成的,公鑰已經拷貝到 Ambari Agent 的機器,具體的 SSH 無密碼登陸配置,能夠在網上很容易找到配置方法,不在此贅述)。另外不要選擇「Perform manual registration on hosts and do not use SSH「。由於咱們須要 Ambari Server 自動去安裝 Ambari Agent。具體參見下圖示例。

圖 3. 安裝配置頁面

圖 3. 安裝配置頁面

點擊查看大圖

第四步,Ambari Server 會自動安裝 Ambari Agent 到剛纔指定的機器列表。安裝完成後,Agent 會向 Ambari Server 註冊。成功註冊後,就能夠繼續 Next 到下一步。

第五步,這裏咱們終於看到跟 Hadoop 有關的名詞了。在這一步,咱們須要選擇要安裝的軟件名稱。本文環境選擇了 HDFS,YARN + MapReduce2,Zoopkeeper,Storm 以及 Spark。選的越多,就會須要越多的機器內存。選擇以後就能夠繼續下一步了。這裏須要注意某些 Service 是有依賴關係的。若是您選了一個須要依賴其餘 Service 的一個 Service,Ambari 會提醒安裝對應依賴的 Service。參見下圖。

圖 4. Service 選擇頁面

圖 4. Service 選擇頁面

點擊查看大圖

第六步和第七步,分別是選擇安裝軟件所指定的 Master 機器和 Slave 機器,以及 Client 機器。這裏使用默認選擇便可(真正在生產環境中,須要根據具體的機器配置選擇)。

第八步,就是 Service 的配置。絕大部分配置已經有默認值,不須要修改。初學者,若是不須要進行調優是能夠直接使用默認配置的。有些 Service 會有一些必須的手工配置項,則必須手動輸入,才能夠下一步。本文環境直接使用默認配置。

第九步,Ambari 會總結一個安裝列表,供用戶審閱。這裏沒問題,就直接下一步。

第十步,Ambari 會開始安裝選擇的 Service 到 Ambari Agent 的機器(以下圖)。這裏可能須要等好一會,由於都是在線安裝。安裝完成以後,Ambari 就會啓動這些 Service。

圖 5. Service 的安裝進度

圖 5. Service 的安裝進度

點擊查看大圖

安裝完成以後,就能夠查看 Ambari 的 Dashboard 了。例以下圖。

圖 6. Ambari 的 Dashboard 頁面

圖 6. Ambari 的 Dashboard 頁面

點擊查看大圖

至此,您專屬的 bigdata 集羣已經安裝完成。

利用 Ambari 管理 Hadoop 集羣

在上一章節中,咱們已經體驗到 Ambari 爲 Hadoop 生態圈的安裝提供的便利。這已經省去了不少的人力成本。尤爲是對大數據圈子的測試人員來講,自動化就容易了不少。下面咱們看看如何經過 Ambari 管理 Hadoop 的集羣。

Service Level Action(服務級別的操做)

首先咱們進到 Ambari 的 GUI 頁面,並查看 Dashboard。在左側的 Service 列表中,咱們能夠點擊任何一個您想要操做的 Service。以 MapReduce2 爲例(Hadoop 這裏的版本爲 2.6.x,也就是 YARN+HDFS+MapReduce),當點擊 MapReduce2 後,就會看到該 Service 的相關信息,以下圖。

圖 7. MapRduce2 的 Service 頁面

圖 7. MapRduce2 的 Service 頁面

點擊查看大圖

中間部分是 Service 的模塊(Component)信息,也就是該 Service 有哪些模塊及其數目。右上角有個 Service Action 的按鈕,當點擊該按鈕後就能夠看到不少 Service 的控制命令。也就是經過這些 Service Action 命令,對 Service 進行管理的。

可能有的人會說,裝完 Hadoop 的集羣后,並不知道這個集羣是否是可用。這時候咱們就能夠運行一個「Run Service Check」。點擊這個命令後,就會出現下圖的進度顯示。

圖 8. MapReduce Service Check

圖 8. MapReduce Service Check

其實這裏就是經過運行一個經典的 MapReduce Wordcount 實例,來檢查 MapReduce 是否是正常。對於 Service Action 裏面的 Start、Stop 的含義就是,啓停整個集羣全部該 Service 的模塊(也就是 Service level)。當執行進度頁面彈出來的時候,咱們能夠點擊 Operations 的名字,進而查看每一個機器的進度和運行 log。以下圖 Stop 的操做。

圖 9. 命令執行進度 1

圖 9. 命令執行進度

圖 10. 命令執行進度 2

圖 10. 命令執行進度 2

維護模式(Maintenance Mode)以及如何添加一個自定義的命令到 Service Action,我會在後續的連載中進行介紹。

Host Level Action(機器級別的操做)

首先,咱們回到 Ambari 的 Dashboard 頁面。頁面最上面中間的地方有個 Hosts,點擊這個標籤,咱們就能夠看到 Ambari 所管理的機器列表。以下圖。

圖 11. Ambari 的機器列表

圖 11. Ambari 的機器列表

點擊查看大圖

圖片中紅色的數字是警告信息(Ambari Alert),這裏咱們先略過它,後續文章再作介紹。先看左上角的 Actions,點擊這個按鈕,就能夠看到 Host level Action 的選項了,其實和 Service Level 是相似的,只是執行的範圍不同。以下圖。當用戶選擇 All Hosts -> Hosts -> Start All Components,Ambari 就會將全部 Service 的全部模塊啓動。

圖 12. 啓動全部 Service 的全部模塊

圖 12. 啓動全部 Service 的全部模塊

若是用戶選擇 All Hosts-> DataNodes -> Stop,Ambari 就會把全部機器的 DataNode 這個模塊關閉。以下圖。

圖 13. 關閉全部的 DataNode 模塊

圖 13. 關閉全部的 DataNode 模塊

Component Level Action(模塊級別的操做)

上面的圖中,咱們能夠看到 Decommisson、Recommission。這些命令實際上是自定義的模塊級別的操做(Component Level Action)。不過上圖中命令一旦執行,就是對多個機器的同個模塊執行。

咱們如今嘗試只對單個機器的一個模塊(Component)執行。首先咱們回到 Hosts 的頁面。這時候點擊機器名,咱們就會進入到該機器的 Component 頁面。以下圖。

圖 14. Component 頁面

圖 14. Component 頁面

這時候只要點擊每一個 Component(模塊)後面的按鈕,就能夠看到該模塊的操做命令了。例如,咱們能夠停掉這臺機器的 DataNode 模塊。

圖 15. 中止 DataNode 模塊 1

圖 15. 中止 DataNode 模塊

圖 16. 中止 DataNode 模塊 2

圖 16. 中止 DataNode 模塊 2

關於如何給一個模塊添加自定義的命令,也會在後續的連載中作介紹。

這一章節中,主要介紹瞭如何經過三種級別的 Action(操做)管理 Hadoop 的集羣。在 Ambari 中已經加入了不少自定義的 Action 去作一些特殊的操做。若是對 Hadoop 生態圈的軟件足夠熟悉,就能夠嘗試更多的 Action。可能有的人會問,Ambari 可不能夠擴容集羣。答案固然是能夠的。Ambari 能夠給自身的集羣添加機器(也就是添加 Ambari Agent),而後將 Service 的模塊安裝在新的機器,也能夠把某些模塊安裝到已有的其餘的機器。篇幅有限,將在後續的連載中介紹更多的內容。

Ambari 的架構和工做原理

Ambari 基本的架構和工做原理以下圖 17 所示。

圖 17. Ambari 的基本架構

圖 17. Ambari 的基本架構

Ambari Server 會讀取 Stack 和 Service 的配置文件。當用 Ambari 建立集羣的時候,Ambari Server 傳送 Stack 和 Service 的配置文件以及 Service 生命週期的控制腳本到 Ambari Agent。Agent 拿到配置文件後,會下載安裝公共源裏軟件包(Redhat,就是使用 yum 服務)。安裝完成後,Ambari Server 會通知 Agent 去啓動 Service。以後 Ambari Server 會按期發送命令到 Agent 檢查 Service 的狀態,Agent 上報給 Server,並呈如今 Ambari 的 GUI 上。

Ambari Server 支持 Rest API,這樣能夠很容易的擴展和定製化 Ambari。甚至於不用登錄 Ambari 的 GUI,只須要在命令行經過 curl 就能夠控制 Ambari,以及控制 Hadoop 的 cluster。具體的 API 能夠參見 Apache Ambari 的官方網頁 API reference。

對於安全方面要求比較苛刻的環境來講,Ambari 能夠支持 Kerberos 認證的 Hadoop 集羣。

擴展 Ambari 管理一個自定義的 Service

首先,咱們須要規劃自定義的 Service 屬於哪一個 Stack(固然 Stack 也是能夠自定義的)。這裏爲了快速建立一個新的 Service,並且咱們已經安裝了 HDP 2.2 的 Stack,因此就將自定義的 Service 放在 HDP 2.2 之下。

第一步,首先在 Ambari Service 機器上找到 HDP 2.2 Stack 的目錄,以下圖所示。

圖 18. HDP 2.2 的目錄

圖 18. HDP 2.2 的目錄

第二步,須要建立一個 Service 目錄,咱們這裏用「SAMPLE」做爲目錄名。並在 SAMPLE 底下建立 metainfo.xml。示例代碼以下。主要解釋下 xml 代碼中的兩個字段 category 和 cardinality。category 指定了該模塊(Component)的類別,能夠是 MASTER、SLAVE、CLIENT。Cardinality 指的是所要安裝的機器數,能夠是固定數字 1,能夠是一個範圍好比 1-2,也能夠是 1+,或者 ALL。若是是一個範圍的時候,安裝的時候會讓用戶選擇機器。另外這裏有關 Service 和 Component 的 name 配置要用大寫,小寫有時候會有問題。Displayname 能夠隨意設置。

1

2

3

4

5

6

7

8

9

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

<?xml version="1.0"?>

<metainfo>

 <schemaVersion>2.0</schemaVersion>

 <services>

 <service>

 <name>SAMPLE</name>

 <displayName>My Sample</displayName>

 <comment>My v1 Sample</comment>

 <version>1.0</version>

 <components>

 <component>

 <name>MYMASTER</name>

 <displayName>My Master</displayName>

 <category>MASTER</category>

 <cardinality>1</cardinality>

 <commandScript>

 <script>scripts/master.py</script>

 <scriptType>PYTHON</scriptType>

 <timeout>5000</timeout>

 </commandScript>

 </component>

 <component>

 <name>MYSALVE</name>

 <displayName>My Slave</displayName>

 <category>SLAVE</category>

 <cardinality>1+</cardinality>

 <commandScript>

 <script>scripts/slave.py</script>

 <scriptType>PYTHON</scriptType>

 <timeout>5000</timeout>

 </commandScript>

 </component>

 </components>

 <osSpecifics>

 <osSpecific>

 <osFamily>any</osFamily>

 </osSpecific>

 </osSpecifics>

 </service>

 </services>

</metainfo>

第三步,須要建立 Service 的控制腳本。這裏咱們須要在 SAMPLE 底下建立一個 package 目錄,而後在 package 底下建立目錄 scripts ,進而建立 master.py 和 slave.py。這裏須要保證腳本路徑和上一步中 metainfo.xml 中的配置路徑是一致的。這兩個 Python 腳本是用來控制 Master 和 Slave 模塊的生命週期。腳本中函數的含義也如其名字同樣:install 就是安裝調用的接口;start、stop 分別就是啓停的調用;Status 是按期檢查 component 狀態的調用;Configure 是安裝完成配置該模塊的調用。示例目錄結構以下圖。

圖 19. Sample Service 的目錄結構

圖 19. Sample Service 的目錄結構

Python 腳本的示例代碼:

Master.py:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

import sys, os

from resource_management import *

from resource_management.core.exceptions import ComponentIsNotRunning

from resource_management.core.environment import Environment

from resource_management.core.logger import Logger

 

class Master(Script):

 def install(self, env):

 print "Install My Master"

 

 def configure(self, env):

 print "Configure My Master"

 

 def start(self, env):

 print "Start My Master"

 

 def stop(self, env):

 print "Stop My Master"

 

 def status(self, env):

 print "Status..."

 

if __name__ == "__main__":

 Master().execute()

Slave.py:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

import sys, os

from resource_management import *

from resource_management.core.exceptions import ComponentIsNotRunning

from resource_management.core.environment import Environment

from resource_management.core.logger import Logger

 

class Slave(Script):

 def install(self, env):

 print "Install My Slave"

 

 def configure(self, env):

 print "Configure My Slave"

 

 def start(self, env):

 print "Start My Slave"

 

 def stop(self, env):

 print "Stop My Slave"

 def status(self, env):

 print "Status..."

 

if __name__ == "__main__":

 Slave().execute()

第四步,須要重啓 Ambari Server。由於 Ambari Server 只有在重啓的時候纔會讀取 Service 和 Stack 的配置。命令行執行:

1

ambari-server restart

第五步,登陸 Ambari 的 GUI,點擊左下角的 Action,選擇 Add Service。以下圖:

圖 20. Add Service 按鈕

圖 20. Add Service 按鈕

這時候就能夠看到咱們自定義的 Service:SAMPLE。以下圖:

圖 21. Sample Service 列表

圖 21. Sample Service 列表

選擇左側 My Sample 後,就能夠一路 Next 了,這個過程其實和咱們在搭建 Hadoop2.x 集羣的時候是相似的。因爲這個 Service 沒有真的安裝包,因此安裝過程會很是的快,啓動命令也沒有真正的邏輯,因此啓動過程也是很快的。等最後點擊完 Complete,整個安裝過程也就結束了。再回到 Ambari 的 Dashboard 的時候,咱們就能夠看到這個 My Sample 了,以下圖:

圖 22. My Sample 的 Service 頁面

圖 22. My Sample 的 Service 頁面

點擊查看大圖

到此就能夠和第四節中管理 Hadoop 集羣同樣管理咱們的 My Sample。例以下圖,Stop 咱們的 My Sample。

圖 23. Stop Sample 頁面 1

圖 23. Stop Sample 頁面 1

圖 24. Stop Sample 頁面 2

圖 24. Stop Sample 頁面 2

圖 25. Stop Sample 頁面 3

圖 25. Stop Sample 頁面 3

進階的篇幅中,將會探討如何給咱們的 My Sample 自定義一些 Actions,以及 Action 之間的依賴關係如何定義。篇幅有限,這裏就先到此爲止。但願以上的介紹可以燃起你們對 Ambari 的熱情。

總結

大數據與雲計算可謂是現在數據中心中最火的兩項技術領域,幾乎全部的 IT 服務商都想在這兩項技術中有所建樹。相信 Ambari 能夠幫助一些 Hadoop 的初學者。長遠看來,大數據的發展離不開雲計算,雲計算中 IaaS 可謂已經很成熟,而且價格低廉。這時候許多公司將目光彙集在了 PaaS。大數據的流行更是加速了相關 PaaS 產品的發展,而 Ambari 的出現必然能夠拉近 IaaS 和 PaaS 的距離。也就是說有了 Ambari,或許再加上 Docker,那麼快速從 IaaS 演進到 PaaS 就顯得不是那麼困難了。

固然這裏 Ambari 要跟 IaaS 更好的切合,還有個對手那就是 Sahara。它是另外一個土生土長的 OpenStack 的子項目,其目的也是爲了在 Openstack 上面快速搭建 Hadoop 等集羣。指望着這些項目可以快速成長,未來對你們都有所幫助。

相關主題

相關文章
相關標籤/搜索