@import url(http://www.tkk7.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
Hadoop/Hbase是開源版的google Bigtable, GFS, MapReduce的實現(xiàn),隨著互聯(lián)網(wǎng)的發(fā)展,大數(shù)據(jù)的處理顯得越發(fā)重要,Hadoop/Hbase的用武之地也越發(fā)廣泛。為了更好的使用Hadoop/Hbase系統(tǒng),需要有一套完善的監(jiān)控系統(tǒng),來了解系統(tǒng)運行的實時狀態(tài),做到一切盡在掌握。Hadoop/Hbase有自己非常完善的metrics framework, 里面包種各種維度的系統(tǒng)指標(biāo)的統(tǒng)計,另外,這套metrics framework設(shè)計的也非常不錯,用戶可以很方便地添加自定義的metrics。更為重要的一點是metrics的展示方式,目前它支持三種方式:一種是落地到本地文件,一種是report給Ganglia系統(tǒng),另一種是通過JMX來展示。本文主要介紹怎么把Hadoop/Hbase的metrics report給Ganglia系統(tǒng),通過瀏覽器來查看。
介紹后面的內(nèi)容之前有必要先簡單介紹一下Ganglia系統(tǒng)。Ganglia是一個開源的用于系統(tǒng)監(jiān)控的系統(tǒng),它由三部分組成:gmond, gmetad, webfrontend, 三部分是這樣分工的:
gmond: 是一個守護進程,運行在每一個需要監(jiān)測的節(jié)點上,收集監(jiān)測統(tǒng)計,發(fā)送和接受在同一個組播或單播通道上的統(tǒng)計信息
gmetad: 是一個守護進程,定期檢查gmond,從那里拉取數(shù)據(jù),并將他們的指標(biāo)存儲在RRD存儲引擎中
webfrontend: 安裝在有g(shù)metad運行的機器上,以便讀取RRD文件,用來做前臺展示
簡單總結(jié)它們?nèi)叩母髯缘墓τ茫琯mond收集數(shù)據(jù)各個node上的metrics數(shù)據(jù),gmetad匯總gmond收集到的數(shù)據(jù),webfrontend在前臺展示gmetad匯總的數(shù)據(jù)。Ganglia缺省是對系統(tǒng)的一些metric進行監(jiān)控,比如cpu/memory/net等。不過Hadoop/Hbase內(nèi)部做了對Ganglia的支持,只需要簡單的改配置就可以將Hadoop/Hbase的metrics也接入到ganglia系統(tǒng)中進行監(jiān)控。
接下來介紹如何把Hadoop/Hbase接入到Ganglia系統(tǒng),這里的Hadoop/Hbase的版本號是0.94.2,早期的版本可能會有一些不同,請注意區(qū)別。Hbase本來是Hadoop下面的子項目,因此所用的metrics framework原本是同一套Hadoop metrics,但后面hadoop有了改進版本的metrics framework:metrics2(metrics version 2), Hadoop下面的項目都已經(jīng)開始使用metrics2, 而Hbase成了Apache的頂級子項目,和Hadoop成為平行的項目后,目前還沒跟進metrics2,它用的還是原始的metrics.因此這里需要把Hadoop和Hbase的metrics分開介紹。
Hadoop接入Ganglia:
1. Hadoop metrics2對應(yīng)的配置文件為:hadoop-metrics2.properties
2. hadoop metrics2中引用了source和sink的概念,source是用來收集數(shù)據(jù)的, sink是用來把source收集的數(shù)據(jù)consume的(包括落地文件,上報ganglia,JMX等)
3. hadoop metrics2配置支持Ganglia:
#*.sink.ganglia.class=org.apache.hadoop.metrics2.sink.ganglia.GangliaSink30
*.sink.ganglia.class=org.apache.hadoop.metrics2.sink.ganglia.GangliaSink31
*.sink.ganglia.period=10
*.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
#uncomment as your needs
namenode.sink.ganglia.servers=10.235.6.156:8649
#datanode.sink.ganglia.servers=10.235.6.156:8649
#jobtracker.sink.ganglia.servers=10.0.3.99:8649
#tasktracker.sink.ganglia.servers=10.0.3.99:8649
#maptask.sink.ganglia.servers=10.0.3.99:8649
#reducetask.sink.ganglia.servers=10.0.3.99:8649
這里需要注意的幾點:
(1) 因為Ganglia3.1與3.0不兼容,需要根據(jù)Ganglia的版本選擇使用GangliaSink30或者GangliaSink31
(2) period配置上報周期,單位是秒(s)
(3) namenode.sink.ganglia.servers指定Ganglia gmetad所在的host:port,用來向其上報數(shù)據(jù)
(4) 如果同一個物理機器上同時啟動了多個hadoop進程(namenode/datanode, etc),根據(jù)需要把相應(yīng)的進程的sink.ganglia.servers配置好即可
Hbase接入Ganglia:
1. Hbase所用的hadoop metrics對應(yīng)的配置文件是: hadoop-metrics.properties
2. hadoop metrics里核心是Context,寫文件有寫文件的TimeStampingFileContext, 向Ganglia上報有GangliaContext/GangliaContext31
3. hadoop metrics配置支持Ganglia:
# Configuration of the "hbase" context for ganglia
# Pick one: Ganglia 3.0 (former) or Ganglia 3.1 (latter)
# hbase.class=org.apache.hadoop.metrics.ganglia.GangliaContext
hbase.class=org.apache.hadoop.metrics.ganglia.GangliaContext31
hbase.period=10
hbase.servers=10.235.6.156:8649
這里需要注意幾點:
(1) 因為Ganglia3.1和3.0不兼容,所以如果是3.1以前的版本,需要用GangliaContext, 如果是3.1版的Ganglia,需要用GangliaContext31
(2) period的單位是秒(s),通過period可以配置向Ganglia上報數(shù)據(jù)的周期
(3) servers指定的是Ganglia gmetad所在的host:port,把數(shù)據(jù)上報到指定的gmetad
(4) 對rpc和jvm相關(guān)的指標(biāo)都可以進行類似的配置