@import url(http://m.tkk7.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
Hadoop/Hbase是開源版的google Bigtable, GFS, MapReduce的實現,隨著互聯網的發展,大數據的處理顯得越發重要,Hadoop/Hbase的用武之地也越發廣泛。為了更好的使用Hadoop/Hbase系統,需要有一套完善的監控系統,來了解系統運行的實時狀態,做到一切盡在掌握。Hadoop/Hbase有自己非常完善的metrics framework, 里面包種各種維度的系統指標的統計,另外,這套metrics framework設計的也非常不錯,用戶可以很方便地添加自定義的metrics。更為重要的一點是metrics的展示方式,目前它支持三種方式:一種是落地到本地文件,一種是report給Ganglia系統,另一種是通過JMX來展示。本文主要介紹怎么把Hadoop/Hbase的metrics report給Ganglia系統,通過瀏覽器來查看。
介紹后面的內容之前有必要先簡單介紹一下Ganglia系統。Ganglia是一個開源的用于系統監控的系統,它由三部分組成:gmond, gmetad, webfrontend, 三部分是這樣分工的:
gmond: 是一個守護進程,運行在每一個需要監測的節點上,收集監測統計,發送和接受在同一個組播或單播通道上的統計信息
gmetad: 是一個守護進程,定期檢查gmond,從那里拉取數據,并將他們的指標存儲在RRD存儲引擎中
webfrontend: 安裝在有gmetad運行的機器上,以便讀取RRD文件,用來做前臺展示
簡單總結它們三者的各自的功用,gmond收集數據各個node上的metrics數據,gmetad匯總gmond收集到的數據,webfrontend在前臺展示gmetad匯總的數據。Ganglia缺省是對系統的一些metric進行監控,比如cpu/memory/net等。不過Hadoop/Hbase內部做了對Ganglia的支持,只需要簡單的改配置就可以將Hadoop/Hbase的metrics也接入到ganglia系統中進行監控。
接下來介紹如何把Hadoop/Hbase接入到Ganglia系統,這里的Hadoop/Hbase的版本號是0.94.2,早期的版本可能會有一些不同,請注意區別。Hbase本來是Hadoop下面的子項目,因此所用的metrics framework原本是同一套Hadoop metrics,但后面hadoop有了改進版本的metrics framework:metrics2(metrics version 2), Hadoop下面的項目都已經開始使用metrics2, 而Hbase成了Apache的頂級子項目,和Hadoop成為平行的項目后,目前還沒跟進metrics2,它用的還是原始的metrics.因此這里需要把Hadoop和Hbase的metrics分開介紹。
Hadoop接入Ganglia:
1. Hadoop metrics2對應的配置文件為:hadoop-metrics2.properties
2. hadoop metrics2中引用了source和sink的概念,source是用來收集數據的, sink是用來把source收集的數據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不兼容,需要根據Ganglia的版本選擇使用GangliaSink30或者GangliaSink31
(2) period配置上報周期,單位是秒(s)
(3) namenode.sink.ganglia.servers指定Ganglia gmetad所在的host:port,用來向其上報數據
(4) 如果同一個物理機器上同時啟動了多個hadoop進程(namenode/datanode, etc),根據需要把相應的進程的sink.ganglia.servers配置好即可
Hbase接入Ganglia:
1. Hbase所用的hadoop metrics對應的配置文件是: 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上報數據的周期
(3) servers指定的是Ganglia gmetad所在的host:port,把數據上報到指定的gmetad
(4) 對rpc和jvm相關的指標都可以進行類似的配置