ambari部署各個組件
使用ambari進行部署時主要需要的組件包括:
- ambari-server: 主要部署的控制節點,負責控制agent進行部署。
- mysql: server存儲的數據庫。也支持postgresql等數據庫。
- ambari-agent: 主要執行部署的節點,根據控制節點,部署相應的服務的相應組件(compoment)。
- repo: 可以是公網的庫,也可以是本地源。主要提供各個服務安裝的rpm包等。ambari主要使用的是HDP(hortonworks data platform)的庫。
- consul: 用於DNS解析。因為各個節點之間需要通過域名來相互進行訪問。用consul來提供DNS解析服務,無需在每個節點上配置hosts。對應的,各個容器也需要將DNS(即resolve.conf)指定為部署consul的ip。
部署流程
每個組件都可以單獨做成鏡像。其中repo可以使用公網的庫,也可以使用自己搭建的本地源。
HDP的版本要和ambari的版本對應。對應關系可以查看hdp官網。
在實驗中我使用的是ambari 2.2.1-v20的鏡像和HDP 2.4.3。
搭建repo庫
主要是安裝httpd並把HDP和HDP-UTILS的tar包解壓到指定目錄。這個不詳述了。
創建server和agent容器
使用docker-ambari的ambari-functions
來創建集群。
- 修改
ambari-functions
中的server和agent鏡像名稱 source ambari-functions
- 運行
amb-setttings
,查看配置是否有問題 - 運行
amb-start-cluster 3
。啟動server/agent/consul容器。 - 此時ambari-server就正常啟動了。
- 進入ambari-server容器,
ssh-keygen -t rsa -P ''
生成密鑰。 - 進入ambari-agent,
yum install -y sudo
,mkdir -p /var/log/ambari-agent
,mkdir -p /var/lib/ambari-agent
。將ambari-server的公鑰拷貝到/root/.ssh/authorized_keys
文件中。 - 從頁面訪問ambari-server。即可按步驟添加多個agent到集群中,並安裝對應的service。
我在虛擬機上單機安裝了HDFS+YARN+MAPREDUCE+SPARK服務。spark可用。我再裝storm時,虛擬機配置太差,撐不住,服務無法啟動。
ambari的好處是集成了監控等功能,組件很全面。
一些問題和待解決的點
- 集群編排問題。比如需要創建幾個容器,每個容器應該是什么角色,安裝什么組件,要事先規划好,再去創建。
- ambari-agent容器掛掉重啟后,默認不會重新加入回集群。需要配置適當的腳本,使得
- 官方ambari-agent沒有sudo,而且對應的ambari-agent的log目錄等都沒有創建。因此需要在官方鏡像基礎上再進行改造。
- 密鑰的生成以及分發。
- ambari-agent的規划問題。比如agent作為datanode時,需要使用VOLUME的外掛盤來對數據進行保存,而不是使用容器本身的存儲(容器本身存儲僅10G,也不夠用)。當然,這也可以做到容器的鏡像中或者生成容器時動態掛載。
- 自動創建集群。這里主要的難點是使用ambari的api創建cluster,添加service等。還需要深入研究下。參考api。
- ambari-agent鏡像細化的問題。現在ambari-agent中實際是一個空的鏡像,沒有安裝service。那么我們是否可以根據service的不同,分別制作出hadoop-ambari-agent鏡像,spark-ambari-agent鏡像等,省去一部分服務安裝的時間。