使用ganglia 實現監控 hadoop 和 hbase(詳細過程總結)
一,環境準備
hadoop 2.8.2 分散式環境(三個節點 安裝請參考 hadoop分散式環境安裝)
hbase 1.2.6 分散式環境(三個節點 ,安裝參考hbase分散式環境安裝 )
主節點採用 ubuntu 16.04 桌面版 ,從節點為伺服器版的ubuntu 16.04
主機:
172.16.12.1 zhoujun (主機點)
172.16.12.129 hadoop3
172.16.12.131 hadoop2
二,Ganglia的簡介
關於 Ganglia 軟體,Ganglia是一個跨平臺可擴充套件的,高效能運算系統下的分散式監控系統,如叢集和網格。它是基於分層設計,它使用廣泛的技術,如XML資料代表,便攜資料傳輸,RRDtool用於資料儲存和視覺化。它利用精心設計的資料結構和演算法實現每節點間併發非常低的。它已移植到廣泛的作業系統和處理器架構上,目前在世界各地成千上萬的叢集正在使用。它已 被用來連結大學校園和世界各地,可以處理2000節點的規模。gmond 帶來的系統負載非常少,這使得它成為在叢集中各臺計算機上執行的一段程式碼,而不會影響使用者效能。
Ganglia 由兩個所謂主要守護程序 gmond(Ganglia 監測守護程序)和 gmetad(Ganglia 元守護程序),一個基於 PHP 的 Web 前端和其他一些小的實用程式
三,安裝Ganglia
1, 在主節點上安裝相關軟體
sudo apt-get install ganglia-monitor rrdtool gmetad ganglia-webfrontend
在安裝過程中,你應該會看到類似下面的安裝後與apache2伺服器重啟選擇,直接 Yes,然後按Enter鍵。將ganglia的檔案連結到apache的預設目錄下
sudo ln -s /usr/share/ganglia-webfrontend /var/www/ganglia
2, 在從節點上安裝 ganglia-monitor在主節點上安裝ganglia-webfrontend和ganglia-monitor。在其他監視節點上,只需要安裝ganglia-monitor即可sudo apt-get install ganglia-monitor
3,Ganglia 主節點配置
複製 Ganglia webfrontend Apache 配置,使用下面的命令來正確的位置:
sudo cp /etc/ganglia-webfrontend/apache.conf /etc/apache2/sites-enabled/ganglia.conf #(很關鍵的一步)
現在,您需要使用以下命令來編輯 Ganglia 元守護程式的配置檔案:
sudo vim /etc/ganglia/gmetad.conf
其中修改如下幾個屬性data_source "hadoop-hbase" 3 172.16.12.1:8649 172.16.12.129:8649 172.16.12.131:8649 # 三個節點資訊
setuid_username "zhoujun" # 使用者名稱 gmetad的使用者名稱
rrd_rootdir "/var/lib/ganglia/rrds" # 注意這個資料夾的許可權,一定保證其他用能夠訪問,一面出錯
case_sensitive_hostnames 1
4, 修改 ganglia-monitor 的配置檔案,每臺機器上都進行如下配置
sudo vim /etc/ganglia/gmond.conf
修改的內容如下:
cluster {
name = "hadoop-hbase" # 和上面的配置檔案data_source 一致
owner = "zhoujun" # 這裡的使用者名稱和上面的一致
latlong = "unspecified"
url = "unspecified"
}
/* The host section describes attributes of the host, like the location */
host {
location = "unspecified"
}
/* Feel free to specify as many udp_send_channels as you like. Gmond
used to only support having a single channel */
udp_send_channel {
# mcast_join = 239.2.11.71 # 註釋掉
host=172.16.12.1 # 新增 gmetad的節點ip
port = 8649
ttl = 1
}
/* You can specify as many udp_recv_channels as you like as well. */
udp_recv_channel {
#mcast_join = 239.2.11.71 # 註釋掉
#host=zhoujun
port = 8649
#bind = zhoujun # 註釋掉
}
其他上面沒有提到的配置項,不建議修改!
三,配置hadoop, 所有節點都要配置
vim /opt/hadoop/etc/hadoop/hadoop-metrics2.properties
注意:一定先將配置檔案中沒有是 # 開頭的配置檔案全部加上 # 將其註釋掉,這點很重要!然後再在檔案最後新增如下內容
*.sink.ganglia.class=org.apache.hadoop.metrics2.sink.ganglia.GangliaSink31
*.sink.ganglia.period=10
*.sink.ganglia.slope=jvm.metrics.gcCount=zero,jvm.metrics.memHeapUsedM=both
*.sink.ganglia.dmax=jvm.metrics.threadsBlocked=70,jvm.metrics.memHeapUsedM=40
namenode.sink.ganglia.servers=172.16.12.1:8649 # namenode 所在的節點 多個用英文下的逗號隔開
resourcemanager.sink.ganglia.servers=172.16.12.1:8649 # resourcemanager 所在的節點
datanode.sink.ganglia.servers=172.16.12.1:8649,172.16.12.129:8649,172.16.12.131:8649 # datanode 所在的節點 多個用英文下的逗號隔開
nodemanager.sink.ganglia.servers=172.16.12.1:8649,172.16.12.129:8649,172.16.12.131:8649
# nodemanager 所在的節點 多個用英文下的逗號隔開
maptask.sink.ganglia.servers=172.16.12.1:8649 # map reducetask.sink.ganglia.servers=172.16.12.1:8649 # rdeuce
四,在所有的hbase節點中均配置hadoop-metrics2-hbase.properties vim /opt/hbase/conf/hadoop-metrics2-hbase.properties
注意:這個也一定先將配置檔案中沒有是 # 開頭的配置檔案全部加上 # 將其註釋掉,這點很重要!然後再在檔案最後新增如下內容*.sink.ganglia.class=org.apache.hadoop.metrics2.sink.ganglia.GangliaSink31
*.sink.ganglia.period=10
hbase.sink.ganglia.period=10
hbase.sink.ganglia.servers=172.16.12.1:8649 # hbase 主節點資訊
五, 啟動服務
1, 啟動hadoop和hbase
start-all.sh # 啟動 hadoop
start-hbase.sh # 啟動 hbase
2, 啟動ganglia和apache 服務
先需要重啟hadoop和hbase 。在各個節點上啟動gmond服務,主節點還需要啟動gmetad服務,同時重啟apache2。
使用apt-get方式安裝的Ganglia,可以直接用service方式啟動。
sudo service ganglia-monitor start #(每臺機器都需要啟動)
sudo service gmetad start #(在安裝了ganglia-webfrontend的機器上啟動
sudo /etc/init.d/apache2 restart #(在主機上重啟apache2)
或者: 建議用下面的方式啟動
sudo /etc/init.d/ganglia-monitor start
sudo /etc/init.d/gmetad start
sudo /etc/init.d/apache2 restart
啟動後相關資訊:
訪問 http://172.16.12.1/ganglia 檢視狀態資訊:
若安裝不成功,有幾個很有用的除錯命令:
以除錯模式啟動gmetad:gmetad -d 9
檢視gmetad收集到的XML檔案:telnet zhoujun 8649
gmetad收集到的資訊被放到/var/lib/ganglia/rrds/
可以通過以下命令檢查是否有資料在傳輸 tcpdump port 8649