1. 程式人生 > >ganglia學習1之ganglia叢集版搭建(支援hadoop和spark)

ganglia學習1之ganglia叢集版搭建(支援hadoop和spark)

spark原始碼解讀系列環境:spark-1.5.2、hadoop-2.6.0、scala-2.10.4,ganglia-3.6.1

系統:ubuntu 14.04

1.理解

1.1 ganglia的概述

      Ganglia是UC Berkeley發起的一個開源叢集監視專案,設計用於測量數以千計的節點。Ganglia的核心包含gmond、gmetad以及一個Web前端。主要是用來監控系統性能,如:cpu 、mem、硬碟利用率, I/O負載、網路流量情況等,通過曲線很容易見到每個節點的工作狀態,對合理調整、分配系統資源,提高系統整體效能起到重要作用。
      ganglia是一個叢集監控工具,hadoop和spark已經支援
      ganglia有論文,“The ganglia distributed monitoring system:
design, implementation, and experience”。

1.2 Ganglia architecture:

1.3 叢集配置

1.3.1 準備

需要先配置apache2和php

安裝 Apache2:

sudo apt-get install apache2

安裝PHP模組:

sudo apt-get install php5

其他模組安裝:

sudo apt-get install libapache2-mod-php5
sudo apt-get install libapache2-mod-auth-mysql

具體請參考【5】或者搜尋,網上有很多

1.3.2 安裝ganglia單節點

開啟終端,執行以下命令:

sudo apt-get install ganglia-monitor rrdtool gmetad ganglia-webfrontend

在安裝過程中,你應該會看到安裝後與apache2伺服器重啟選擇,直接 Yes,然後按Enter鍵。

需要複製 Ganglia webfrontend Apache 配置,使用下面的命令來正確的位置:

sudo cp /etc/ganglia-webfrontend/apache.conf /etc/apache2/sites-enabled/ganglia.conf

需要重啟服務:

sudo /etc/init.d/ganglia-monitor start
sudo /etc/init.d/gmetad start
sudo /etc/init.d/apache2 restart

現在你可以使用以下命令訪問gnglia webinterface:

http://serverip/ganglia/

可以參考【6】

1.3.3 安裝ganglia叢集

主節點:Mcnode7

客戶端:Master Mcnode1 Mcnode2 Mcnode3 Mcnode4 Mcnode5 Mcnode6 Mcnode7

主節點(一個)

現在需要使用以下命令來編輯 Ganglia 元守護程式的配置檔案:

sudo vi /etc/ganglia/gmetad.conf

更改如下:

data_source "Spark" 10 Mcnode7:8649

通過以上列出機器服務的資料來源,IP:埠或伺服器名稱:埠。如果未指定埠號8649(預設gmond埠)。

case_sensitive_hostnames 0 

設定為1,則不會將hostname中大寫變成小寫

需要重啟服務:

sudo /etc/init.d/ganglia-monitor restart
sudo /etc/init.d/gmetad start
sudo /etc/init.d/apache2 restart

現在你可以使用以下命令訪問ganglia webinterface:

http://192.168.1.50/ganglia/

客戶端(8個)

(1) ganglia 客戶端安裝

你需要安裝以下所有伺服器要監視客戶端包

sudo apt-get install ganglia-monitor

(2)客戶端配置:

使用了單播模式,需要使用下面的命令編輯主節點的配置檔案:

sudo vi /etc/ganglia/gmond.conf

更改如下:(—-註釋為改動)

/* If a cluster attribute is specified, then all gmond hosts are wrapped inside
 * of a <CLUSTER> tag.  If you do not specify a cluster tag, then all <HOSTS> will
 * NOT be wrapped inside of a <CLUSTER> tag. */
cluster {
  name = "Spark"             ------叢集名稱
  owner = "unspecified"
  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 = Mcnode7   ------傳送給安裝gmetad的機器
  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   ------註釋掉組播 
  port = 8649
  #bind = 239.2.11.71        ------註釋掉
}

儲存並關閉檔案。
(3)客戶端生效
重啟 ganglia monitor 服務

sudo /etc/init.d/ganglia-monitor restart

具體參考【6】【7】

效果:

1.3.4 配置hadoop metrics設定,連線ganglia叢集

修改Hadoop的配置檔案hadoop/etc/hadoop/hadoop-metrics.properties(適用於Ganglia老版本)

dfs.class=org.apache.hadoop.metrics.ganglia.GangliaContext31
dfs.period=10
dfs.servers=192.168.1.50:8649

mapred.class=org.apache.hadoop.metrics.ganglia.GangliaContext31
mapred.period=10
mapred.servers=192.168.1.50:8649

jvm.class=org.apache.hadoop.metrics.ganglia.GangliaContext31
jvm.period=10
jvm.servers=192.168.1.50:8649

rpc.class=org.apache.hadoop.metrics.ganglia.GangliaContext31
rpc.period=10
rpc.servers=192.168.1.50:8649

ugi.class=org.apache.hadoop.metrics.ganglia.GangliaContext31
ugi.period=10
ugi.servers=192.168.1.50:8649

(2) 修改Hadoop的配置檔案hadoop/etc/hadoop/hadoop-metrics2.properties(適用於Ganglia新版本)

*.sink.file.class=org.apache.hadoop.metrics2.sink.FileSink
*.period=10
*.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=192.168.1.50:8649
datanode.sink.ganglia.servers=192.168.1.50:8649
resourcemanager.sink.ganglia.servers=192.168.1.50:8649
nodemanager.sink.ganglia.servers=192.168.1.50:8649

maptask.sink.ganglia.servers=192.168.1.50:8649
reducetask.sink.ganglia.servers=192.168.1.50:8649

所有的servers都修改為安裝為gmetad的機器IP(Spark-Master),儲存完以後將配置檔案分發到各個Slave節點的${HADOOP_HOME}/etc/hadoop目錄下,重啟Hadoop叢集即可。

效果:

dfs.datanode.BlocksRead:


參考見【8】

1.3.5 配置spark metrics設定,連線ganglia叢集

(1)配置環境

由於license問題,spark的bin裡面沒有自帶ganglia,需要自己弄

方法1: 編譯的時候自己加上
mvn -DskipTests -Pspark-ganglia-lgpl -Phadoop-2.6 -Dhadoop.version=2.6.0 clean package

方法2:執行的時候用jar形式加入 (參考【11】)
–jars lib/spark-ganglia-lgpl_2.10-x.x.x.jar …

(2)設定spark metrics

自行部署spark叢集,編輯$SPARK_HOME/conf/metrics.properties檔案(沒有可以拷貝metrics.properties.template),新增以下內容:
複製程式碼

*.sink.ganglia.class=org.apache.spark.metrics.sink.GangliaSink
*.sink.ganglia.host=Mcnode7     --host(可以是ip)
*.sink.ganglia.port=8649
*.sink.ganglia.period=10
*.sink.ganglia.unit=seconds
*.sink.ganglia.ttl=1
*.sink.ganglia.mode=unicast     --單播
*.sink.ganglia.name=Spark       --名字

*.sink.console.class=org.apache.spark.metrics.sink.ConsoleSink
*.sink.console.period=10
*.sink.console.unit=seconds

master.source.jvm.class=org.apache.spark.metrics.source.JvmSource
worker.source.jvm.class=org.apache.spark.metrics.source.JvmSource
driver.source.jvm.class=org.apache.spark.metrics.source.JvmSource
executor.source.jvm.class=org.apache.spark.metrics.source.JvmSource

更改後scp到其它spark節點,啟動spark叢集。

(3) 啟動服務進行監控
啟動ganglia的gmetad,gmond以及httpd服務:

service gmond start
service gmetad start
service httpd start

參考見【9】

(3) 效果
常用的監控指標有:

DAGScheduler.job.allJobs
driver.BlockManager.memory.maxMem_MB
master.works

spark叢集的監控:

單個節點的監控:

控制檯輸出時間資訊:

參考

【1】http://spark.apache.org/
【2】http://spark.apache.org/docs/1.5.2/programming-guide.html
【3】https://github.com/xubo245/SparkLearning
【4】http://ganglia.info/
【5】http://www.cnblogs.com/ylks/p/4244532.html
【6】http://www.linuxidc.com/Linux/2014-08/105838.htm
【7】http://www.linuxidc.com/Linux/2014-08/105838p2.htm
【8】http://blog.sina.com.cn/s/blog_8fd85b850102vv5o.html
【9】http://www.cnblogs.com/czm1032851561/p/5869891.html
【10】https://github.com/ganglia/ganglia-web/wiki#Installation
【11】http://blog.csdn.net/xubo245/article/details/53100560