[原创]HBase客户端开发举例(第二部…

3. 创建MonitorClient.java, 代码如下所示

public class MonitorClient {
    // 表名为 jvmMonitor
    public final static String TABLE_NAME = "jvmMonitor";  
   //列族名 "target", "memory", "os"
    public final static String[] COLUM_FAMILIES = new String[]{"target", "memory", "os"}; 
    private MBeanServerConnection connect;
    private HTable htable;
    private String serverIP;  //Web服务器IP
    private int serverPort;    // Web 服务器端口
    private String userName;  // Web 服务器 用户名
    private String password;  // Web 服务器密码
    private HBaseAdmin admin;
    private String partRowKey; //行健的前半部分

    public static void main(String[] args) throws Exception {
       
       // 为了方便测试,将所监控 Web 服务器的IP,端口,用户名,密码写死在主函数中。
        args = new String[4];
        args[0] = "192.168.1.107";
        args[1] = "8686";
        args[2] = "admin";
        args[3] = "adminadmin";

        MonitorClient monitorClient = new MonitorClient();
        monitorClient.setServerIP(args[0]);
        monitorClient.setServerPort(Integer.valueOf(args[1]));
        monitorClient.setUserName(args[2]);
        monitorClient.setPassword(args[3]);
        monitorClient.doMonitor();
    }

    public void doMonitor()   {

        try {
             // 创建表
            this.createTable();
            while (true) {
                //建立到web服务器的JMX协议连接
                if (this.connect == null) {
                    this.connect = getJMXConnector(serverIP, serverPort, userName, password);
                }
               //插入数据
                this.insertData();
                //暂停10秒后继续监控
                TimeUnit.SECONDS.sleep(10);
            }
        } catch (Exception ex) {
            Logger.getLogger(MonitorClient.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
             //若发生异常关闭到HBase连接
            if (this.htable != null) {
                try {
                    this.htable.close();
                } catch (Exception ex) {
                }
            }
            if (this.admin != null) {
                try {
                    this.admin.close();
                } catch (Exception ex) {
                }
            }
        }
    }

    // 方法 getJMXConnector 用于建立到Web 服务器的连接
    private MBeanServerConnection getJMXConnector(String serverIP, int serverPort, String userName, String password) throws Exception {
        String jmxURL = "service:jmx:rmi:///jndi/rmi://" + serverIP + ":" + serverPort + "/jmxrmi";
        final JMXServiceURL target = new JMXServiceURL(jmxURL);
        Map env = new HashMap();
        env.put(JMXConnector.CREDENTIALS, new String[]{userName, password});
        JMXConnector jmxConnector = JMXConnectorFactory.connect(target, env);
        System.out.println(" ---successful to connect to " + this.serverIP + ":" + this.serverPort + " ---");
        return jmxConnector.getMBeanServerConnection();
    }

   // 在HBase中建立表,如果已存在则不再创建
    private void createTable() throws Exception {
        boolean isExist = false;
        Configuration conf = HBaseConfiguration.create();
        admin = new HBaseAdmin(conf);
        HTableDescriptor[] tables = admin.listTables();
        for (HTableDescriptor eachTtd : tables) {
            if (TABLE_NAME.equals(eachTtd.getNameAsString())) {
                isExist = true;
                System.out.println(" --- table " + TABLE_NAME + " exist---");
                break;
            }
        }
        if (!isExist) {
            HTableDescriptor htd = new HTableDescriptor(TABLE_NAME);
            HColumnDescriptor hcd0 = new HColumnDescriptor(COLUM_FAMILIES[0]);
            HColumnDescriptor hcd1 = new HColumnDescriptor(COLUM_FAMILIES[1]);
            HColumnDescriptor hcd2 = new HColumnDescriptor(COLUM_FAMILIES[2]);

            htd.addFamily(hcd0);
            htd.addFamily(hcd1);
            htd.addFamily(hcd2);
            admin.createTable(htd);
            System.out.println(" ---successful to create table " + TABLE_NAME + " ---");
        }
        this.htable = new HTable(conf, TABLE_NAME);

    }

   // 从Web服务器从获取信息,并插入表中
    private void insertData() throws Exception {
        final MemoryMXBean mxBean = ManagementFactory.newPlatformMXBeanProxy(
                connect, ManagementFactory.MEMORY_MXBEAN_NAME, MemoryMXBean.class);

        // JVM 内存信息
        MemoryUsage muh = mxBean.getHeapMemoryUsage();
        long heapUsedKB = muh.getUsed() / 1024;
        long heapMaxKB = muh.getMax() / 1024;
        long heapCommitKB = muh.getCommitted() / 1024;
        long heapUtil = (heapUsedKB * 100L) / heapCommitKB;

        MemoryUsage munh = mxBean.getNonHeapMemoryUsage();
        long nonHeapUsedKB = munh.getUsed() / 1024;
        long nonHeapMaxKB = munh.getMax() / 1024;
        long nonHeapCommitKB = munh.getCommitted() / 1024;
        long nonHeapUtil = (nonHeapUsedKB * 100L) / nonHeapCommitKB;

       //服务器的操作系统信息
        ObjectName objOperatingSystem = new ObjectName("java.lang:type=OperatingSystem");
        long virtMemCommitKB = (Long) connect.getAttribute(objOperatingSystem, "CommittedVirtualMemorySize") / 1024;
        long freePhyMemKB = (Long) connect.getAttribute(objOperatingSystem, "FreePhysicalMemorySize") / 1024;
        long freeSwapKB = (Long) connect.getAttribute(objOperatingSystem, "FreeSwapSpaceSize") / 1024;
        long totalPhyMemKB = (Long) connect.getAttribute(objOperatingSystem, "TotalPhysicalMemorySize") / 1024;
        long totalSwapKB = (Long) connect.getAttribute(objOperatingSystem, "TotalSwapSpaceSize") / 1024;
        long phyMemUtil = 100 - 100 * freePhyMemKB / totalPhyMemKB;
        long swapMemUtil = 100 - 100 * freeSwapKB / totalSwapKB;
        long nanoBefore = System.nanoTime();
        long cpuBefore = (Long) connect.getAttribute(objOperatingSystem, "ProcessCpuTime");
        TimeUnit.SECONDS.sleep(3);
        long cpuAfter = (Long) connect.getAttribute(objOperatingSystem, "ProcessCpuTime");
        long nanoAfter = System.nanoTime();
        long cpuUtil;
        if (nanoAfter > nanoBefore) {
            cpuUtil = ((cpuAfter - cpuBefore) * 100L) / (nanoAfter - nanoBefore);
        } else {
            cpuUtil = 0;
        }

        String rowKey = this.makeRowKey();
        byte[] row = Bytes.toBytes(rowKey);
        byte[] bytesTarget = Bytes.toBytes(COLUM_FAMILIES[0]);
        byte[] bytesMemory = Bytes.toBytes(COLUM_FAMILIES[1]);
        byte[] bytesOS = Bytes.toBytes(COLUM_FAMILIES[2]);

        Put put = new Put(row);
         
       //插入 Web 服务器IP、端口信息
        put.add(bytesTarget, Bytes.toBytes("serverIP"), Bytes.toBytes(String.valueOf(this.serverIP)));
        put.add(bytesTarget, Bytes.toBytes("serverPort"), Bytes.toBytes(String.valueOf(this.serverPort)));
       
       //插入 Web 服务器JVM内存信息
        put.add(bytesMemory, Bytes.toBytes("heapUsedKB"), Bytes.toBytes(String.valueOf(heapUsedKB)));
        put.add(bytesMemory, Bytes.toBytes("heapMaxKB"), Bytes.toBytes(String.valueOf(heapMaxKB)));
        put.add(bytesMemory, Bytes.toBytes("heapCommitKB"), Bytes.toBytes(String.valueOf(heapCommitKB)));
        put.add(bytesMemory, Bytes.toBytes("heapUtil"), Bytes.toBytes(String.valueOf(heapUtil)));
        put.add(bytesMemory, Bytes.toBytes("nonHeapUsedKB"), Bytes.toBytes(String.valueOf(nonHeapUsedKB)));
        put.add(bytesMemory, Bytes.toBytes("nonHeapMaxKB"), Bytes.toBytes(String.valueOf(nonHeapMaxKB)));
        put.add(bytesMemory, Bytes.toBytes("nonHeapCommitKB"), Bytes.toBytes(String.valueOf(nonHeapCommitKB)));
        put.add(bytesMemory, Bytes.toBytes("nonHeapUtil"), Bytes.toBytes(String.valueOf(nonHeapUtil)));

       //插入 Web 服务器操作系统信息
        put.add(bytesOS, Bytes.toBytes("virtMemCommitKB"), Bytes.toBytes(String.valueOf(virtMemCommitKB)));
        put.add(bytesOS, Bytes.toBytes("freePhyMemKB"), Bytes.toBytes(String.valueOf(freePhyMemKB)));
        put.add(bytesOS, Bytes.toBytes("freeSwapKB"), Bytes.toBytes(String.valueOf(freeSwapKB)));
        put.add(bytesOS, Bytes.toBytes("totalSwapKB"), Bytes.toBytes(String.valueOf(totalSwapKB)));
        put.add(bytesOS, Bytes.toBytes("phyMemUtil"), Bytes.toBytes(String.valueOf(phyMemUtil)));
        put.add(bytesOS, Bytes.toBytes("swapMemUtil"), Bytes.toBytes(String.valueOf(swapMemUtil)));
        put.add(bytesOS, Bytes.toBytes("cpuUtil"), Bytes.toBytes(String.valueOf(cpuUtil)));

        htable.put(put);
        htable.flushCommits();

        System.out.println(" --- insert one row :  " + rowKey + " ---");

    }

 
  // 生成行健,行健用 Web 服务器IP和数据采集的时间来表示,共24位,前12位是IP,后12位是时间,不够的在前面用0填充
  // 例如:IP为 10.1.2.122,时间为2012-11-25 23:01:08,则行健为01000100212220121125230108
    private void makePartRowKey() {
        String[] splits = this.serverIP.split("[.]");
        for (int i =0;i
            String s = splits[i];
            int len = s.length();
            while (len < 3) {
                s="0"+s;
                len ++;
            }
            splits[i] = s;
        }
        this.partRowKey = splits[0]+ splits[1] + splits[2] + splits[3] ;
    }

  // 根据 Web 服务器IP生成行健的前半部分
    private String makeRowKey() {
        if (this.partRowKey == null) {
            this.makePartRowKey();
        }
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        Date date = new Date();
        String formatData = sdf.format(date);
        return this.partRowKey + formatData;
    }
   
  // 以下为Getter Setter
    public String getServerIP() {
        return serverIP;
    }

    public void setServerIP(String serverIP) {
        this.serverIP = serverIP;
    }
    public int getServerPort() {
        return serverPort;
    }
    public void setServerPort(int serverPort) {
        this.serverPort = serverPort;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}


程序运行的控制台打印结果:
..............................
12/11/25 22:58:15 INFO zookeeper.ZooKeeper: Client environment:java.compiler=<NA>
12/11/25 22:58:15 INFO zookeeper.ZooKeeper: Client environment:os.name=Windows 7
12/11/25 22:58:15 INFO zookeeper.ZooKeeper: Client environment:os.arch=x86
12/11/25 22:58:15 INFO zookeeper.ZooKeeper: Client environment:os.version=6.1
12/11/25 22:58:15 INFO zookeeper.ZooKeeper: Client environment:user.name=hui.li
12/11/25 22:58:15 INFO zookeeper.ZooKeeper: Client environment:user.home=C:\Users\hui.li
12/11/25 22:58:15 INFO zookeeper.ZooKeeper: Client environment:user.dir=D:\CentOS64\Share\Example
12/11/25 22:58:15 INFO zookeeper.ZooKeeper: Initiating client connection, connectString=192.168.1.201:2181 sessionTimeout=180000 watcher=hconnection
12/11/25 22:58:15 INFO zookeeper.ClientCnxn: Opening socket connection to server /192.168.1.201:2181
12/11/25 22:58:15 INFO zookeeper.ClientCnxn: Socket connection established to server1/192.168.1.201:2181, initiating session
12/11/25 22:58:15 INFO zookeeper.ClientCnxn: Session establishment complete on server server1/192.168.1.201:2181, sessionid = 0x3b35ddd5d4001d, negotiated timeout = 180000
 ---successful to create table jvmMonitor ---
12/11/25 22:58:16 INFO zookeeper.ZooKeeper: Initiating client connection, connectString=192.168.1.201:2181 sessionTimeout=180000 watcher=hconnection
12/11/25 22:58:16 INFO zookeeper.ClientCnxn: Opening socket connection to server /192.168.1.201:2181
12/11/25 22:58:16 INFO zookeeper.ClientCnxn: Socket connection established to server1/192.168.1.201:2181, initiating session
12/11/25 22:58:16 INFO zookeeper.ClientCnxn: Session establishment complete on server server1/192.168.1.201:2181, sessionid = 0x3b35ddd5d4001e, negotiated timeout = 180000
 ---successful to connect to 192.168.1.107:8686 ---
 --- insert one row :  19216800110720121125225820 ---
 --- insert one row :  19216800110720121125225833 ---
 --- insert one row :  19216800110720121125225846 ---
 --- insert one row :  19216800110720121125225859 ---
 --- insert one row :  19216800110720121125225912 ---
........................

在Hbase shell 下面查看表  jvmMonitor:

hbase(main):041:0> scan 'jvmMonitor'   

........................................

19216800110720121126004237       column=memory:heapMaxKB, timestamp=1353861709757, value=506816                                
 19216800110720121126004237       column=memory:heapUsedKB, timestamp=1353861709757, value=76504                                
 19216800110720121126004237       column=memory:heapUtil, timestamp=1353861709757, value=46                                     
 19216800110720121126004237       column=memory:nonHeapCommitKB, timestamp=1353861709757, value=84096                           
 19216800110720121126004237       column=memory:nonHeapMaxKB, timestamp=1353861709757, value=229376                             
 19216800110720121126004237       column=memory:nonHeapUsedKB, timestamp=1353861709757, value=83955                             
 19216800110720121126004237       column=memory:nonHeapUtil, timestamp=1353861709757, value=99                                  
 19216800110720121126004237       column=os:cpuUtil, timestamp=1353861709757, value=0                                           
 19216800110720121126004237       column=os:freePhyMemKB, timestamp=1353861709757, value=960380                                 
 19216800110720121126004237       column=os:freeSwapKB, timestamp=1353861709757, value=4194303                                  
 19216800110720121126004237       column=os:phyMemUtil, timestamp=1353861709757, value=78                                       
 19216800110720121126004237       column=os:swapMemUtil, timestamp=1353861709757, value=0                                       
 19216800110720121126004237       column=os:totalSwapKB, timestamp=1353861709757, value=4194303                                 
 19216800110720121126004237       column=os:virtMemCommitKB, timestamp=1353861709757, value=293684                              
 19216800110720121126004237       column=target:serverIP, timestamp=1353861709757, value=192.168.1.107                          
 19216800110720121126004237       column=target:serverPort, timestamp=1353861709757, value=8686                                 
 19216800110720121126004250       column=memory:heapCommitKB, timestamp=1353861722751, value=164192                             
 19216800110720121126004250       column=memory:heapMaxKB, timestamp=1353861722751, value=506816                                
 19216800110720121126004250       column=memory:heapUsedKB, timestamp=1353861722751, value=77188                                
 19216800110720121126004250       column=memory:heapUtil, timestamp=1353861722751, value=47                                     
 19216800110720121126004250       column=memory:nonHeapCommitKB, timestamp=1353861722751, value=84096                           
 19216800110720121126004250       column=memory:nonHeapMaxKB, timestamp=1353861722751, value=229376                             
 19216800110720121126004250       column=memory:nonHeapUsedKB, timestamp=1353861722751, value=83955                             
 19216800110720121126004250       column=memory:nonHeapUtil, timestamp=1353861722751, value=99                                  
 19216800110720121126004250       column=os:cpuUtil, timestamp=1353861722751, value=0                                           
 19216800110720121126004250       column=os:freePhyMemKB, timestamp=1353861722751, value=953164                                 
 19216800110720121126004250       column=os:freeSwapKB, timestamp=1353861722751, value=4194303                                  
 19216800110720121126004250       column=os:phyMemUtil, timestamp=1353861722751, value=78                                       
 19216800110720121126004250       column=os:swapMemUtil, timestamp=1353861722751, value=0                                       
 19216800110720121126004250       column=os:totalSwapKB, timestamp=1353861722751, value=4194303                                 
 19216800110720121126004250       column=os:virtMemCommitKB, timestamp=1353861722751, value=293684                              
 19216800110720121126004250       column=target:serverIP, timestamp=1353861722751, value=192.168.1.107                          
 19216800110720121126004250       column=target:serverPort, timestamp=1353861722751, value=8686                                 
483 row(s) in 7.7500 seconds



转载于:https://www.cnblogs.com/leeeee/p/7276661.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值