今天配置了Ganglia來監控Hadoop和Hbase,這裡做一下簡單的記錄。
ganglia主要有兩個程序,它們是:gmond和gmetad。叢集内的節點,通過運作gmond收集釋出節點狀态資訊,然後gmetad周期性的輪詢gmond收集到的資訊,然後存入rrd資料庫,通過web伺服器可以對其進行查詢展示。
1.首先,選擇一台伺服器來運作gmetad和apache伺服器(主節點)。
1.1 運作如下的指令安裝必要的軟體。
sudo apt-get install ganglia-monitor rrdtool gmetad ganglia-webfrontend
1.2 配置/etc/ganglia/gmetad.conf檔案
安裝完成後,編輯/etc/ganglia/gmetad.conf檔案,修改data_source,“cyber_space”是我給叢集取的名字,後面跟着要監控的主機的名稱。可以在主機後添加端口資訊,這些規則在配置檔案的注釋中寫的比較詳細。
# data_source "my cluster" 10 localhost my.machine.edu:8649 1.2.3.5:8655
# data_source "my grid" 50 1.3.4.7:8655 grid.org:8651 grid-backup.org:8651
# data_source "another source" 1.3.4.7:8655 1.3.4.8
data_source "cyber_space" namenode
因為是單點傳播,是以datasource配置成namenode,表示gmeta隻從namenode上讀取節點資料
2.配置被監控的節點(從節點)
2.1 使用如下的指令安裝gmond。
sudo apt-get install ganglia-monitor
我這裡也需要監控gmeta運作的節點,是以在第一步中,也安裝了ganglia-monitor。
2.2 配置/etc/ganglia/gmond.conf檔案
首先,需要将cluster塊中的name改為我們叢集的名稱,如下所示:
cluster {
name = "cyber_space"
owner = "unspecified"
latlong = "unspecified"
url = "unspecified"
}
叢集中,我們使用單點傳播模式,即所有被監控的節點,都會将資訊發送到指定的ip上,是以,需要修改udp_send_channel塊,将mcast_join注釋,然後添加host,host的值是gmeta運作的節點,如下所示,
udp_send_channel {
/*mcast_join = 239.2.11.71 */
host = 192.168.2.160
port = 8649
ttl = 1
}
,udp_recv_channel也需要修改為如下所示,将mcast_join和bind注釋。
udp_recv_channel {
/*mcast_join = 239.2.11.71 */
port = 8649
/*bind = 239.2.11.71 */
}
3. 重新開機各項服務
在主節點上運作如下指令重新開機gmeta和gmond
sudo /etc/init.d/gmetad restart
suod /etc/init.d/ganglia-monitor restart
在從節點上運作如下指令重新開機gmond
sudo /etc/init.d/ganglia-monitor restart
4. 建立web-frontend到apache目錄下的軟連結
sudo ln -s /usr/share/ganglia-webfrontend/ /var/www/html/ganglia
5. 在浏覽器上打開連結:http://192.168.2.160/ganglia,就能看到下圖所示的ganglia監控頁面,說明ganglia已經配置成功了
6. 配置Hadoop監控
修改Hadoop的配置檔案,HADOOP_HOME/etc/hadoop/hadoop-metrics2.properties,按照下面的内容對配置檔案進行修改。
# for Ganglia 3.1 support
*.sink.ganglia.class=org.apache.hadoop.metrics2.sink.ganglia.GangliaSink31
# *.sink.ganglia.period=10
# default for supportsparse is false
# *.sink.ganglia.supportsparse=true
*.sink.ganglia.slope=jvm.metrics.gcCount=zero,jvm.metrics.memHeapUsedM=both
*.sink.ganglia.dmax=jvm.metrics.threadsBlocked=70,jvm.metrics.memHeapUsedM=40
# Tag values to use for the ganglia prefix. If not defined no tags are used.
# If '*' all tags are used. If specifiying multiple tags separate them with
# commas. Note that the last segment of the property name is the context name.
#
#*.sink.ganglia.tagsForPrefix.jvm=ProcesName
#*.sink.ganglia.tagsForPrefix.dfs=
#*.sink.ganglia.tagsForPrefix.rpc=
#*.sink.ganglia.tagsForPrefix.mapred=
namenode.sink.ganglia.servers=namenode:8649
datanode.sink.ganglia.servers=namenode:8649
resourcemanager.sink.ganglia.servers=namenode:8649
nodemanager.sink.ganglia.servers=namenode:8649
mrappmaster.sink.ganglia.servers=namenode:8649
這裡也是因為采用單點傳播的原因,是以把資料都發送到namenode上,由namenode的gmeta來采集這些資料
修改完後,重新開機ganglia的服務即可。可看到如下圖所示的諸如NameNode,DataNode等資訊。