1. 软件需求
假设需要通过JMX协议持续不断地监控Web服务器的Java虚拟机(JVM)的内存、CPU等使用情况,并将观测结果存入数据库。由于观测记录的数据量相当大,而且观测记录写入数据库后一般只进行读操作,不进行修改和删除操作,所以NoSql数据库比关系型数据更适合存储数据。
在此项目中开发两个客户端MonitorClient和QueryDataClient,MonitorClient用于从Web服务器中获得JVM数据并保存在HBase之中,QueryDataClient用于从HBase中查询数据。
Hbase数据库中的表名为jvmMonitor,含有三个列族"target", "memory", "os"。
为方便查询,行健用Web服务器IP和数据采集的时间来表示,共24位,前12位是IP,后12位是时间,不够的在前面用0填充。 例如:IP为 10.1.2.122,时间为2012-11-25 23:01:08,则行健为01000100212220121125230108。 这样便可通过IP、时间范围上下限构建行健来检索结果。
2. 构建项目
在IDE中创建一个MVN项目Example,并将Hadoop,HBase的核心Jar包加入pom.xml 文件中:
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-core</artifactId>
<version>0.20.2</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase</artifactId>
<version>0.90.5</version>
</dependency>
在目录 src/main/resource 下加入文件 hbase-site.xml , 用于指定所连接的HBase集群的位置,其内容如下所示:
<configuration>
<property>
<name>hbase.zookeeper.quorum</name>
<value>192.168.1.201</value>
</property>
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
<property skipInDoc="true">
<name>hbase.defaults.for.version</name>
<value>0.90.5</value>
</property>
</configuration>