環(huán)境部署
1.本文發(fā)表時所用的最新版本:
Ubuntu Server 16.10
APACHE AMBARI 2.5.2.0
- 設(shè)置主機、每個從機的內(nèi)網(wǎng)靜態(tài)IP
安裝的時候默認(rèn)只會對一個網(wǎng)卡配置自動獲取IP,一般情況我們會有2個網(wǎng)卡,現(xiàn)在要對另一個網(wǎng)卡手動設(shè)置內(nèi)網(wǎng)IP。首先知道網(wǎng)卡在Linux里的編號,用dmesg | grep ens查看ens開頭的編號有哪些,我這有一個ens160,一個ens192
然后再去sudo vi /etc/network/interfaces
發(fā)現(xiàn)ens160已經(jīng)配置自動獲取IP了,所以另一個ens192我們配置成靜態(tài)IP,添加四行內(nèi)容設(shè)置靜態(tài)IP和子網(wǎng)掩碼:
auto ens192
iface ens192 inet static
address 10.96.1.70
netmask 255.255.255.0
輸入sudo reboot或/etc/init.d/networking restart使其生效
- 修改主機、每個從機的hosts文件,主機名使用FQDN命名,使其能夠互相ping通
這里我的主機名配置如下,大家不必完全按照這個名字配置,但要符合FQDN:
master.hd
slave1.hd
slave2.hd
slave3.hd
slave4.hd
以上三步基本不會有什么坑,也是最基礎(chǔ)最簡單的,沒有什么更優(yōu)雅的方式了。
一般來說Ubuntu安裝時勾上OpenSSH,安裝完系統(tǒng)后SSH直接可以使用了,不需要再做任何配置,起碼我是不用的。
配置SSH直接允許Root登錄
因為集群環(huán)境是在內(nèi)網(wǎng)集群,做好路由隔離后,直接允Root登錄并不會造成很嚴(yán)重的安全問題,在后面的自動安裝需要使用root權(quán)限,否則會卡住不動,嚴(yán)謹(jǐn)點也可以自己新建一個賬號。
sudo vi /etc/ssh/sshd_config
將PermitRootLogin改為yes即可,其他配置項一般不需要動。然后進行驗證ssh root@slave1.hd看能不能登錄到從機。生成SSH證書使得主機到各個從機能免密登錄
這里就有優(yōu)雅的方式了。在主機上sudo ssh-keygen一路回車生成本機公私鑰,不要輸入私鑰密碼。然后執(zhí)行下列命令
ssh-copy-id root@slave1.hd
ssh-copy-id root@slave2.hd
ssh-copy-id root@slave3.hd
...
依次會提示輸入每個從機的root密碼,然后自動將剛才生成的公鑰分發(fā)到各個從機上并馬上生效。
所以現(xiàn)在就可以使用 ssh root@slave1.hd直接登錄,不需要再輸入密碼了。
然后復(fù)制一份剛才生成的私鑰內(nèi)容,等一下用Ambari創(chuàng)建集群時的需要用到這個私鑰。私鑰位于/root/.ssh/id_rsa
比較優(yōu)雅的前奏已經(jīng)準(zhǔn)備完了,接下來馬上就要更優(yōu)雅地部署環(huán)境了。
下載HDP離線安裝包
官方文檔是用源碼安裝,我們要優(yōu)雅,所以直接使用已經(jīng)編譯好的。
首先到 https://docs.hortonworks.com/ 找到Ambari,截止本文發(fā)布的時候,最新版為2.5.2.0,找到它的Apache Ambari Installation,找到HDP離線下載,最新版為?HDP 2.6 Repositories
隨后下載Ubuntu16 Tarball 版的HDP以及HDP-UTILS 。 前者6G多,包含HDFS、HBase、Spark等等各種東西,請做好心理準(zhǔn)備。如果這里不采用離線安裝包的話,等一下幾臺從機都要從網(wǎng)上獲取就毫無樂趣了。
安裝Apache Ambari
Ambari只需要在主機上安裝即可,隨后會自動部署。
繼續(xù)在剛才的網(wǎng)站上,找到Download the Ambari Repository
按照官方手冊指引,以root登錄主機后執(zhí)行三句命令即可完成安裝源的配置。注意這里的版本是2.5.2.0,請注意是否符合你的版本,如果不是請以網(wǎng)站的代碼為準(zhǔn)。
wget -O /etc/apt/sources.list.d/ambari.list http://public-repo-1.hortonworks.com/ambari/ubuntu16/2.x/updates/2.5.2.0/ambari.list
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com B9733A7A07513CAD
apt-get update
apt-get install ambari-server
最后一句安裝,這個安裝包大概有七百多MB。
配置Apache Ambari
繼續(xù)按照這個手冊的指引,執(zhí)行命令ambari-server setup配置Ambari,一路回車采用默認(rèn)配置也可以。途中會自動下載甲骨文的1.8Jdk。用戶名密碼如果不配置,將會是admin和admin。
啟動Apache Ambari
主機上運行一次ambari-server start稍等片刻即可。在這里引用一下手冊內(nèi)容:
Run the following command on the Ambari Server host:
ambari-server start
To check the Ambari Server processes:
ambari-server status
To stop the Ambari Server:
ambari-server stop
現(xiàn)在使用網(wǎng)頁瀏覽器嘗試訪問主機的8080端口
http://<主機IP>:8080
如果出現(xiàn)Ambari的登錄界面,即可完成。賬號密碼如果剛才沒有配置,均為admin。
安裝Nginx
其實也不一定要是Nginx,只是需要其提供的HTTP服務(wù),來作為HDP離線包的下載服務(wù)器。
在主機上使用sudo apt-get install nginx安裝。
執(zhí)行完后,默認(rèn)會自動啟動。訪問http://<主機IP>:80看能否看到Nginx的歡迎頁面。
安裝yum
每個從機、主機都需要安裝yum,否則后面Ambari部署不會通過。詳情見下文的 踩坑記錄1
sudo apt-get install yum
確保Python版本>2.6
Ubuntu16安裝默認(rèn)是符合這個條件的。所以直接略過。
部署HDP離線安裝包
將之前下載到的HDP以及HDP-UTILS 解壓到一個能容得下它們的大空間,然后做軟鏈接,鏈接到/var/www/html下,如果你空間足夠,也可以直接移動到這里。其子路徑隨意。
然后將默認(rèn)的歡迎頁面重命名mv /var/www/html/index.nginx-debian.html /var/www/html/index.nginx-debian.html.bak
進入Nginx的配置文件sudo vi /etc/nginx/sites-enabled/default ,在server{...}里添加一句autoindex on;即打開目錄瀏覽功能。
隨后再次訪問http://<主機IP>時,能看到目錄結(jié)構(gòu),同時能找到HDP以及HDP-UTILS,能夠從頁面上下載,就行了。

創(chuàng)建第一個集群
訪問http://<主機IP>:8080,登錄后,點擊Launch Install Wizard開始創(chuàng)建第一個集群

到了第二步選擇版本后
選擇使用本地庫,


HDP和HDP-UTILS的路徑配置應(yīng)為剛才在主機上用Nginx搭建的Http路徑


設(shè)置從機列表以及主機的root賬號能登錄每個從機的私鑰,即剛才使用ssh-keygen生成的。

如果私鑰和端口設(shè)置正常,hosts文件設(shè)置沒問題,這里的installing將很快完成

踩坑記錄:
- 當(dāng)從機沒有安裝yum,此處無法通過,使用
sudo apt-get install yum安裝。
==========================
Running OS type check...
==========================
Command start time 2017-09-09 23:34:16
env: ‘/var/lib/ambari-agent/tmp/os_check_type1504971236.py’: No such file or directory
Connection to slave2.hd closed.
SSH command execution finished
host=slave2.hd, exitcode=127
Command end time 2017-09-09 23:34:16
ERROR: Bootstrap of host slave2.hd fails because previous action finished with non-zero exit code (127)
ERROR MESSAGE: Connection to slave2.hd closed.
STDOUT: env: ‘/var/lib/ambari-agent/tmp/os_check_type1504971236.py’: No such file or directory
Connection to slave2.hd closed.

全部Success后,會有一個附加條件的檢查。我踩到兩個坑,一個是沒安裝NTP服務(wù),這個很簡單,使用
apt-get install ntp即可還有一個常見的
Transparent Huge Pages Issues
這里要求關(guān)閉Transparent Huge Pages,所有涉及到的主機從機都要做這個。網(wǎng)上通常是做法是在rc.local文件做文章,但是Ubuntu16版本已經(jīng)不存在這個文件了。Google了一番,比較優(yōu)雅的做法是:
參考這位老外David Foerster的解決方案 How do I modify “/sys/kernel/mm/transparent_hugepage/enabled”
install the sysfsutils package:
sudo apt install sysfsutils
and append a line with that setting to/etc/sysfs.conf:
kernel/mm/transparent_hugepage/enabled = never
但是他最初提供的并不全面,還不能解決問題,我后來稍微看一下,自己補充了一句就可以完全關(guān)閉了。在/etc/sysfs.conf里應(yīng)該寫如下兩行。隨后重啟即可。
kernel/mm/transparent_hugepage/enabled = never
kernel/mm/transparent_hugepage/defrag = never
希望大家都有這種美好的結(jié)果

從機不需要手動去安裝Java。只要ssh連上了,Ambari的代理會全都幫你搞定,如果之前的HDP以及HDP-UTILS安裝源路徑設(shè)置沒問題,安裝了Yum,接下來基本沒有什么坑了。
如果有,就是我還沒遇到,靠大家自己去解決了
尾聲
祝大家部署順利 O(∩_∩)O~
參考文獻
How do I modify “/sys/kernel/mm/transparent_hugepage/enabled”

