環境部署
1.本文發表時所用的最新版本:
Ubuntu Server 16.10
APACHE AMBARI 2.5.2.0
- 設置主機、每個從機的內網靜態IP
安裝的時候默認只會對一個網卡配置自動獲取IP,一般情況我們會有2個網卡,現在要對另一個網卡手動設置內網IP。首先知道網卡在Linux里的編號,用dmesg | grep ens
查看ens開頭的編號有哪些,我這有一個ens160,一個ens192
然后再去sudo vi /etc/network/interfaces
發現ens160已經配置自動獲取IP了,所以另一個ens192我們配置成靜態IP,添加四行內容設置靜態IP和子網掩碼:
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
以上三步基本不會有什么坑,也是最基礎最簡單的,沒有什么更優雅的方式了。
一般來說Ubuntu安裝時勾上OpenSSH,安裝完系統后SSH直接可以使用了,不需要再做任何配置,起碼我是不用的。
配置SSH直接允許Root登錄
因為集群環境是在內網集群,做好路由隔離后,直接允Root登錄并不會造成很嚴重的安全問題,在后面的自動安裝需要使用root權限,否則會卡住不動,嚴謹點也可以自己新建一個賬號。
sudo vi /etc/ssh/sshd_config
將PermitRootLogin改為yes即可,其他配置項一般不需要動。然后進行驗證ssh root@slave1.hd
看能不能登錄到從機。生成SSH證書使得主機到各個從機能免密登錄
這里就有優雅的方式了。在主機上sudo ssh-keygen
一路回車生成本機公私鑰,不要輸入私鑰密碼。然后執行下列命令
ssh-copy-id root@slave1.hd
ssh-copy-id root@slave2.hd
ssh-copy-id root@slave3.hd
...
依次會提示輸入每個從機的root密碼,然后自動將剛才生成的公鑰分發到各個從機上并馬上生效。
所以現在就可以使用 ssh root@slave1.hd
直接登錄,不需要再輸入密碼了。
然后復制一份剛才生成的私鑰內容,等一下用Ambari創建集群時的需要用到這個私鑰。私鑰位于/root/.ssh/id_rsa
比較優雅的前奏已經準備完了,接下來馬上就要更優雅地部署環境了。
下載HDP離線安裝包
官方文檔是用源碼安裝,我們要優雅,所以直接使用已經編譯好的。
首先到 https://docs.hortonworks.com/ 找到Ambari,截止本文發布的時候,最新版為2.5.2.0
,找到它的Apache Ambari Installation
,找到HDP離線下載,最新版為?HDP 2.6 Repositories
隨后下載Ubuntu16 Tarball
版的HDP
以及HDP-UTILS
。 前者6G多,包含HDFS、HBase、Spark等等各種東西,請做好心理準備。如果這里不采用離線安裝包的話,等一下幾臺從機都要從網上獲取就毫無樂趣了。
安裝Apache Ambari
Ambari只需要在主機上安裝即可,隨后會自動部署。
繼續在剛才的網站上,找到Download the Ambari Repository
按照官方手冊指引,以root登錄主機后執行三句命令即可完成安裝源的配置。注意這里的版本是2.5.2.0
,請注意是否符合你的版本,如果不是請以網站的代碼為準。
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
繼續按照這個手冊的指引,執行命令ambari-server setup
配置Ambari,一路回車采用默認配置也可以。途中會自動下載甲骨文的1.8Jdk。用戶名密碼如果不配置,將會是admin和admin。
啟動Apache Ambari
主機上運行一次ambari-server start
稍等片刻即可。在這里引用一下手冊內容:
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
現在使用網頁瀏覽器嘗試訪問主機的8080端口
http://<主機IP>:8080
如果出現Ambari的登錄界面,即可完成。賬號密碼如果剛才沒有配置,均為admin。
安裝Nginx
其實也不一定要是Nginx,只是需要其提供的HTTP服務,來作為HDP離線包的下載服務器。
在主機上使用sudo apt-get install nginx
安裝。
執行完后,默認會自動啟動。訪問http://<主機IP>:80
看能否看到Nginx的歡迎頁面。
安裝yum
每個從機、主機都需要安裝yum,否則后面Ambari部署不會通過。詳情見下文的 踩坑記錄1
sudo apt-get install yum
確保Python版本>2.6
Ubuntu16安裝默認是符合這個條件的。所以直接略過。
部署HDP離線安裝包
將之前下載到的HDP
以及HDP-UTILS
解壓到一個能容得下它們的大空間,然后做軟鏈接,鏈接到/var/www/html
下,如果你空間足夠,也可以直接移動到這里。其子路徑隨意。
然后將默認的歡迎頁面重命名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>
時,能看到目錄結構,同時能找到HDP
以及HDP-UTILS
,能夠從頁面上下載,就行了。
創建第一個集群
訪問http://<主機IP>:8080
,登錄后,點擊Launch Install Wizard
開始創建第一個集群
到了第二步選擇版本后
選擇使用本地庫,
HDP和HDP-UTILS的路徑配置應為剛才在主機上用Nginx搭建的Http路徑
設置從機列表以及主機的root賬號能登錄每個從機的私鑰,即剛才使用ssh-keygen生成的。
如果私鑰和端口設置正常,hosts文件設置沒問題,這里的installing將很快完成
踩坑記錄:
- 當從機沒有安裝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服務,這個很簡單,使用
apt-get install ntp
即可還有一個常見的
Transparent Huge Pages Issues
這里要求關閉Transparent Huge Pages,所有涉及到的主機從機都要做這個。網上通常是做法是在rc.local
文件做文章,但是Ubuntu16版本已經不存在這個文件了。Google了一番,比較優雅的做法是:
參考這位老外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
但是他最初提供的并不全面,還不能解決問題,我后來稍微看一下,自己補充了一句就可以完全關閉了。在/etc/sysfs.conf
里應該寫如下兩行。隨后重啟即可。
kernel/mm/transparent_hugepage/enabled = never
kernel/mm/transparent_hugepage/defrag = never
希望大家都有這種美好的結果
從機不需要手動去安裝Java。只要ssh連上了,Ambari的代理會全都幫你搞定,如果之前的HDP
以及HDP-UTILS
安裝源路徑設置沒問題,安裝了Yum,接下來基本沒有什么坑了。
如果有,就是我還沒遇到,靠大家自己去解決了
尾聲
祝大家部署順利 O(∩_∩)O~
參考文獻
How do I modify “/sys/kernel/mm/transparent_hugepage/enabled”