1. 程式人生 > >Ambari——大資料平臺的搭建利器

Ambari——大資料平臺的搭建利器

Ambari 是什麼

Ambari 跟 Hadoop 等開源軟體一樣,也是 Apache Software Foundation 中的一個專案,並且是頂級專案。目前最新的釋出版本是 2.0.1,未來不久將釋出 2.1 版本。就 Ambari 的作用來說,就是建立、管理、監視 Hadoop 的叢集,但是這裡的 Hadoop 是廣義,指的是 Hadoop 整個生態圈(例如 Hive,Hbase,Sqoop,Zookeeper 等),而並不僅是特指 Hadoop。用一句話來說,Ambari 就是為了讓 Hadoop 以及相關的大資料軟體更容易使用的一個工具。

說到這裡,大家就應該明白什麼人最需要 Ambari 了。那些苦苦花費好幾天去安裝、除錯 Hadoop 的初學者是最能體會到 Ambari 的方便之處的。而且,Ambari 現在所支援的平臺元件也越來越多,例如流行的 Spark,Storm 等計算框架,以及資源排程平臺 YARN 等,我們都能輕鬆地通過 Ambari 來進行部署。

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.comzwshen38.example.comzwshen39.example.com。zwshen37 計劃安裝為 Ambari 的 Server,另外兩臺為 Ambari Agent。

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

SSH 的無密碼登入; Ambari 的 Server 會 SSH 到 Agent 的機器,拷貝並執行一些命令。因此我們需要配置 Ambari Server 到 Agent 的 SSH 無密碼登入。在這個例子裡,zwshen37 可以 SSH 無密碼登入 zwshen38 和 zwshen39。 確保 Yum 可以正常工作; 通過公共庫(public repository),安裝 Hadoop 這些軟體,背後其實就是應用 Yum 在安裝公共庫裡面的 rpm 包。所以這裡需要您的機器都能訪問 Internet。 確保 home 目錄的寫許可權。 Ambari 會建立一些 OS 使用者。 確保機器的 Python 版本大於或等於 2.6.(Redhat6.6,預設就是 2.6 的)。 以上的準備工作完成後,便可以真正的開始安裝 Ambari 了。

安裝過程

首先需要獲取 Ambari 的公共庫檔案(public repository)。登入到 Linux 主機並執行下面的命令(也可以自己手工下載):

將下載的 ambari.repo 檔案拷貝到 Linux 的系統目錄/etc/yum.repos.d/。拷貝完後,我們需要獲取該公共庫的所有的原始檔列表。依次執行以下命令。

yum clean all yum list|grep ambari

如圖 1 所示:

圖 1. 獲取公共庫原始檔列表

如果可以看到 Ambari 的對應版本的安裝包列表,說明公共庫已配置成功。然後就可以安裝 Ambari 的 package 了。執行下面的命令安裝 Ambari Server 到該機器。

yum install ambari-server

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

amari-server setup

在這個互動式的設定中,採用預設配置即可。Ambari 會使用 Postgres 資料庫,預設會安裝並使用 Oracle 的 JDK。預設設定了 Ambari GUI 的登入使用者為 admin/admin。並且指定 Ambari Server 的執行使用者為 root。

簡單的 setup 配置完成後。就可以啟動 Ambari 了。執行下面的命令。

ambari-server start

當成功啟動 Ambari Server 之後,便可以從瀏覽器登入,預設的埠為 8080。以本文環境為例,在瀏覽器的位址列輸入 http://zwshen37.example.com:8080,登入密碼為 admin/admin。登入 Ambari 之後的頁面如下圖。

圖 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. 安裝配置頁面

點選檢視大圖

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

第五步,這裡我們終於看到跟 Hadoop 有關的名詞了。在這一步,我們需要選擇要安裝的軟體名稱。本文環境選擇了 HDFS,YARN + MapReduce2,Zoopkeeper,Storm 以及 Spark。選的越多,就會需要越多的機器記憶體。選擇之後就可以繼續下一步了。這裡需要注意某些 Service 是有依賴關係的。如果您選了一個需要依賴其他 Service 的一個 Service,Ambari 會提醒安裝對應依賴的 Service。參見下圖。

圖 4. Service 選擇頁面

點選檢視大圖

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

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

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

第十步,Ambari 會開始安裝選擇的 Service 到 Ambari Agent 的機器(如下圖)。這裡可能需要等好一會,因為都是線上安裝。安裝完成之後,Ambari 就會啟動這些 Service。

圖 5. Service 的安裝進度

點選檢視大圖

安裝完成之後,就可以檢視 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 頁面

點選檢視大圖

中間部分是 Service 的模組(Component)資訊,也就是該 Service 有哪些模組及其數目。右上角有個 Service Action 的按鈕,當點選該按鈕後就可以看到很多 Service 的控制命令。也就是通過這些 Service Action 命令,對 Service 進行管理的。

可能有的人會說,裝完 Hadoop 的集群后,並不知道這個叢集是不是可用。這時候我們就可以執行一個“Run Service Check”。點選這個命令後,就會出現下圖的進度顯示。

圖 8. MapReduce Service Check

點選檢視大圖

其實這裡就是通過執行一個經典的 MapReduce Wordcount 例項,來檢查 MapReduce 是不是正常。對於 Service Action 裡面的 Start、Stop 的含義就是,啟停整個叢集所有該 Service 的模組(也就是 Service level)。當執行進度頁面彈出來的時候,我們可以點選 Operations 的名字,進而檢視每個機器的進度和執行 log。如下圖 Stop 的操作。

圖 9. 命令執行進度 1

點選檢視大圖

圖 10. 命令執行進度 2

點選檢視大圖

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

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

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

圖 11. Ambari 的機器列表

點選檢視大圖

圖片中紅色的數字是警告資訊(Ambari Alert),這裡我們先略過它,後續文章再做介紹。先看左上角的 Actions,點選這個按鈕,就可以看到 Host level Action 的選項了,其實和 Service Level 是類似的,只是執行的範圍不一樣。如下圖。當用戶選擇 All Hosts -> Hosts -> Start All Components,Ambari 就會將所有 Service 的所有模組啟動。

圖 12. 啟動所有 Service 的所有模組

如果使用者選擇 All Hosts-> DataNodes -> Stop,Ambari 就會把所有機器的 DataNode 這個模組關閉。如下圖。

圖 13. 關閉所有的 DataNode 模組

Component Level Action(模組級別的操作)

上面的圖中,我們可以看到 Decommisson、Recommission。這些命令其實是自定義的模組級別的操作(Component Level Action)。不過上圖中命令一旦執行,就是對多個機器的同個模組執行。

我們現在嘗試只對單個機器的一個模組(Component)執行。首先我們回到 Hosts 的頁面。這時候點選機器名,我們就會進入到該機器的 Component 頁面。如下圖。

圖 14. Component 頁面

這時候只要點選每個 Component(模組)後面的按鈕,就可以看到該模組的操作命令了。例如,我們可以停掉這臺機器的 DataNode 模組。

圖 15. 停止 DataNode 模組 1

圖 16. 停止 DataNode 模組 2

點選檢視大圖

關於如何給一個模組新增自定義的命令,也會在後續的連載中做介紹。

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

回頁首

Ambari 的架構和工作原理

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

圖 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 的目錄

第二步,需要建立一個 Service 目錄,我們這裡用“SAMPLE”作為目錄名。並在 SAMPLE 底下建立 metainfo.xml。示例程式碼如下。主要解釋下 xml 程式碼中的兩個欄位 category 和 cardinality。category 指定了該模組(Component)的類別,可以是 MASTER、SLAVE、CLIENT。Cardinality 指的是所要安裝的機器數,可以是固定數字 1,可以是一個範圍比如 1-2,也可以是 1+,或者 ALL。如果是一個範圍的時候,安裝的時候會讓使用者選擇機器。另外這裡有關 Service 和 Component 的 name 配置要用大寫,小寫有時候會有問題。Displayname 可以隨意設定。

<?xml version="1.0"?> 2.0 SAMPLE My Sample My v1 Sample 1.0 MYMASTER My Master MASTER 1 5000 any

第三步,需要建立 Service 的控制指令碼。這裡我們需要在 SAMPLE 底下建立一個 package 目錄,然後在 package 底下建立目錄 scripts ,進而建立 master.pyslave.py。這裡需要保證指令碼路徑和上一步中 metainfo.xml 中的配置路徑是一致的。這兩個 Python 指令碼是用來控制 Master 和 Slave 模組的生命週期。指令碼中函式的含義也如其名字一樣:install 就是安裝呼叫的介面;start、stop 分別就是啟停的呼叫;Status 是定期檢查 component 狀態的呼叫;Configure 是安裝完成配置該模組的呼叫。示例目錄結構如下圖。

圖 19. Sample Service 的目錄結構

Python 指令碼的示例程式碼:

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()

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 的配置。命令列執行:

ambari-server restart

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

圖 20. Add Service 按鈕

這時候就可以看到我們自定義的 Service:SAMPLE。如下圖:

圖 21. Sample Service 列表

選擇左側 My Sample 後,就可以一路 Next 了,這個過程其實和我們在搭建 Hadoop2.x 叢集的時候是類似的。由於這個 Service 沒有真的安裝包,所以安裝過程會非常的快,啟動命令也沒有真正的邏輯,所以啟動過程也是很快的。等最後點選完 Complete,整個安裝過程也就結束了。再回到 Ambari 的 Dashboard 的時候,我們就可以看到這個 My Sample 了,如下圖:

圖 22. My Sample 的 Service 頁面

點選檢視大圖

到此就可以和第四節中管理 Hadoop 叢集一樣管理我們的 My Sample。例如下圖,Stop 我們的 My Sample。

圖 23. Stop Sample 頁面 1

圖 24. Stop Sample 頁面 2

圖 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 等叢集。期望著這些專案能夠快速成長,將來對大家都有所幫助。