天天看點

HBase-叢集狀态資訊

package com.hbase.HBaseAdmin;

import java.io.IOException;
import java.util.Collection;
import java.util.Map;
import java.util.Map.Entry;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.ClusterStatus;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.RegionLoad;
import org.apache.hadoop.hbase.ServerLoad;
import org.apache.hadoop.hbase.ServerName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.master.RegionState;
import org.apache.hadoop.hbase.util.Bytes;

/**
* @author:FengZhen
* @create:2018年9月12日
*/
public class ClusterStatusTest {

  private static String addr="HDP233,HDP232,HDP231";
  private static String port="2181";
  private static Connection connection;
  
  /**
   * 擷取連接配接
   */
  public static void getConnection(){
    Configuration conf = HBaseConfiguration.create();

    conf.set("hbase.zookeeper.quorum",addr);
    conf.set("hbase.zookeeper.property.clientPort", port);
    try {
      connection = ConnectionFactory.createConnection(conf);
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
  
  /*
   * 關閉連接配接
   */
  public static void close() {
    /**
     * close connection
     **/
    if (connection != null) {
      try {
        connection.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  }
  
  public static void main(String[] args) {
    getConnection();
    try {
      Admin admin = connection.getAdmin();
      ClusterStatus clusterStatus = admin.getClusterStatus();
      //目前活着的region伺服器的數量,此數量不包括不可用region伺服器
      int serversSize = clusterStatus.getServersSize();
      System.out.println("目前可用region伺服器數量: " + serversSize);
      
      //目前存活的region伺服器的清單,包括region伺服器的服務、IP、RPC端口、啟動時間戳等
      Collection<ServerName> servers = clusterStatus.getServers();
      for (ServerName serverName : servers) {
        String serverNameStr = serverName.getServerName();
        String hostAndPort = serverName.getHostAndPort();
        int port = serverName.getPort();
        Long startCode = serverName.getStartcode();
        System.out.println("serverName: " + serverNameStr + ", hostAndPort: " + hostAndPort + ", port: " + port + ", startCode: " + startCode);
      }
      
      int deadServersSize = clusterStatus.getDeadServers();
      System.out.println("目前不可用region伺服器數量: " + deadServersSize);
      
      Collection<ServerName> deadServerNames = clusterStatus.getDeadServerNames();
      for (ServerName deadServerName : deadServerNames) {
        String serverNameStr = deadServerName.getServerName();
        String hostAndPort = deadServerName.getHostAndPort();
        int port = deadServerName.getPort();
        Long startCode = deadServerName.getStartcode();
        System.out.println("serverName: " + serverNameStr + ", hostAndPort: " + hostAndPort + ", port: " + port + ", startCode: " + startCode);
      }
      
      //平均每台region伺服器上線了多少region
      double averageLoad = clusterStatus.getAverageLoad();
      System.out.println("平均每台region伺服器上線了多少region:" + averageLoad);
      
      //叢集中region的總數量
      int regionsCount = clusterStatus.getRegionsCount();
      System.out.println("叢集中region的總數量: " + regionsCount);
      
      //叢集的請求TPS(一個表達系統處理能力的性能名額,每秒處理的消息數(Transaction Per Second))
      int requestsCount = clusterStatus.getRequestsCount();
      System.out.println("叢集的請求TPS: " + requestsCount);
      
      //目前叢集的軟體編譯版本 1.1.2.2.6.1.0-129
      String version = clusterStatus.getHBaseVersion();
      System.out.println("目前叢集的軟體編譯版本: " + version);
      
      //傳回叢集的唯一辨別。這個值是叢集第一次啟動時通過UUID生成的,存在根目錄下的hbase.id中
      String clusterId = clusterStatus.getClusterId();
      System.out.println("叢集id: " + clusterId);
      
      //傳回目前叢集正在進行處理的region的事務清單,即移動操作、上線操作和下線操作。
      //鍵是編碼後的region名(由HRegTonInfo.getEncodeName傳回),值是RegionState的執行個體
      Map<String, RegionState> regionsInTransition = clusterStatus.getRegionsInTransition();
      
      System.out.println(">>>>>>>>>>>>>>>>>>>>>>>ServerLoad<<<<<<<<<<<<<<<<<<<<<");
      for (ServerName serverName : servers) {
        System.out.println("-------------------" + serverName.getHostAndPort() + "--------------------");
        //傳回給定region伺服器的目前負載情況
        ServerLoad serverLoad = clusterStatus.getLoad(serverName);
        //等同于getNumverOfRegions
        int getLoad = serverLoad.getLoad();
        System.out.println("目前region伺服器上線的region數量getLoad: " + getLoad);
        //目前region伺服器上線的region數量
        int getNumverOfRegions = serverLoad.getLoad();
        System.out.println("目前region伺服器上線的region數量getNumverOfRegions: " + getNumverOfRegions);
        //傳回目前region伺服器這個周期内的TPS,周期可以通過參數hbase.reigonserver.msginterval來設定。
        //請求數會在一個周期結束後清零,它會統計所有的API請求,如get、put、increment、delete等
        long getNumberOfRequests = serverLoad.getNumberOfRequests();
        System.out.println("目前region伺服器這個周期内的TPS: " + getNumberOfRequests);
        //JVM已使用的記憶體,機關為MB
        int getUsedHeapMB = serverLoad.getUsedHeapMB();
        System.out.println("JVM已使用的記憶體: " + getUsedHeapMB);
        //JVM最大可使用記憶體,機關為MB
        int getMaxHeapMB = serverLoad.getMaxHeapMB();
        System.out.println("JVM最大可使用記憶體: " + getMaxHeapMB);
        //目前region伺服器的存儲檔案數量,即包括這個伺服器管理的所有region
        int getStorefiles = serverLoad.getStorefiles();
        System.out.println("目前region伺服器的存儲檔案數量: " + getStorefiles);
        //目前region伺服器的存儲檔案的總存儲量,機關為MB
        int getStorefileSizeInMB = serverLoad.getStorefileSizeInMB();
        System.out.println("目前region伺服器的存儲檔案的總存儲量: " + getStorefileSizeInMB);
        //目前region伺服器的存儲檔案的索引大小,機關為MB
        int getStorefileIndexSizeInMB = serverLoad.getStorefileIndexSizeInMB();
        System.out.println("目前region伺服器的存儲檔案的索引大小: " + getStorefileIndexSizeInMB);
        //目前region伺服器的已用寫緩存的大小,包括這個region伺服器上所有的region
        int getMemstoreSizeInMB = serverLoad.getMemstoreSizeInMB();
        System.out.println("目前region伺服器的已用寫緩存的大小: " + getMemstoreSizeInMB);
        System.out.println("<<<<<<<<<<<<<<<<RegionLoad>>>>>>>>>>>>>>>>");
        //傳回目前region伺服器中每個region的負載情況,以Map的形式傳回
        //鍵是region名,值是RegionLoad執行個體
        Map<byte[], RegionLoad> getRegionsLoad = serverLoad.getRegionsLoad();
        for (Entry<byte[], RegionLoad> value : getRegionsLoad.entrySet()) {
          String key = Bytes.toString(value.getKey());
          System.out.println("<<<<<<<<<<<<<<<<RegionLoad-" + key + ">>>>>>>>>>>>>>>>");
          RegionLoad regionLoad = value.getValue();
          //将二進制region名轉換為字元串并傳回
          String regionName = regionLoad.getNameAsString();
          System.out.println("regionName: " + regionName);
          //目前region的列族數量
          int getStores = regionLoad.getStores();
          System.out.println("目前region的列族數量: " + getStores);
          //目前region的存儲檔案數量
          int regionGetStorefiles = regionLoad.getStorefiles();
          System.out.println("目前region的存儲檔案數量: " + regionGetStorefiles);
          //目前region的存儲檔案占用空間,MB為機關
          int getStorefileSizeMB = regionLoad.getStorefileSizeMB();
          System.out.println("目前region的存儲檔案占用空間: " + getStorefileSizeMB);
          //目前region的存儲檔案的索引資訊的大小,MB為機關
          int getStorefileIndexSizeMB = regionLoad.getStorefileIndexSizeMB();
          System.out.println("目前region的存儲檔案的索引資訊的大小: " + getStorefileIndexSizeMB);
          //目前region使用的MemStore的大小,機關為MB
          int getMemStoreSizeMB = regionLoad.getMemStoreSizeMB();
          System.out.println("目前region使用的MemStore的大小: " + getMemStoreSizeMB);
          //目前region的本次統計周期内的TPS
          long getRequestsCount = regionLoad.getRequestsCount();
          System.out.println("目前region的本次統計周期内的TPS: " + getRequestsCount);
          //目前region的本次統計周期内的QPS(每秒查詢率QPS是對一個特定的查詢伺服器在規定時間内所處理流量多少的衡量标準。)
          long getReadRequestsCount = regionLoad.getReadRequestsCount();
          System.out.println("目前region的本次統計周期内的QPS: " + getReadRequestsCount);
          //目前region的本次統計周期内的WPS
          long getWriteRequestsCount = regionLoad.getWriteRequestsCount();
          System.out.println("目前region的本次統計周期内的WPS: " + getWriteRequestsCount);
        }
      }
      
    } catch (IOException e) {
      e.printStackTrace();
    }
    close();
  }
  
}      
目前可用region伺服器數量: 1
serverName: HDP231,16020,1535939295270, hostAndPort: HDP231:16020, port: 16020, startCode: 1535939295270
目前不可用region伺服器數量: 2
serverName: HDP233,16020,1531794848784, hostAndPort: HDP233:16020, port: 16020, startCode: 1531794848784
serverName: HDP232,16020,1531128455707, hostAndPort: HDP232:16020, port: 16020, startCode: 1531128455707
平均每台region伺服器上線了多少region:25.0
叢集中region的總數量: 25
叢集的請求TPS: 0
目前叢集的軟體編譯版本: 1.1.2.2.6.1.0-129
叢集id: 465b49e6-73eb-4845-9dc7-1eb9eaf594e6
>>>>>>>>>>>>>>>>>>>>>>>ServerLoad<<<<<<<<<<<<<<<<<<<<<
-------------------HDP231:16020--------------------
目前region伺服器上線的region數量getLoad: 25
目前region伺服器上線的region數量getNumverOfRegions: 25
目前region伺服器這個周期内的TPS: 0
JVM已使用的記憶體: 153
JVM最大可使用記憶體: 2007
目前region伺服器的存儲檔案數量: 9
目前region伺服器的存儲檔案的總存儲量: 0
目前region伺服器的存儲檔案的索引大小: 0
目前region伺服器的已用寫緩存的大小: 0
<<<<<<<<<<<<<<<<RegionLoad>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<RegionLoad-hbase:meta,,1>>>>>>>>>>>>>>>>
regionName: hbase:meta,,1
目前region的列族數量: 1
/目前region的存儲檔案數量: 2
目前region的存儲檔案占用空間: 0
目前region的存儲檔案的索引資訊的大小: 0
目前region使用的MemStore的大小: 0
目前region的本次統計周期内的TPS: 24857
目前region的本次統計周期内的QPS: 24806
目前region的本次統計周期内的WPS: 51
<<<<<<<<<<<<<<<<RegionLoad-hbase:namespace,,1531128486691.d25b2b8cb0d3d1c538437c1b89b8f8c8.>>>>>>>>>>>>>>>>
regionName: hbase:namespace,,1531128486691.d25b2b8cb0d3d1c538437c1b89b8f8c8.
目前region的列族數量: 1
/目前region的存儲檔案數量: 1
目前region的存儲檔案占用空間: 0
目前region的存儲檔案的索引資訊的大小: 0
目前region使用的MemStore的大小: 0
目前region的本次統計周期内的TPS: 4
目前region的本次統計周期内的QPS: 4
目前region的本次統計周期内的WPS: 0
<<<<<<<<<<<<<<<<RegionLoad-socialSecurity,,1531128735425.d31a708f6a7b307c9bb2aa6818b790f8.>>>>>>>>>>>>>>>>
regionName: socialSecurity,,1531128735425.d31a708f6a7b307c9bb2aa6818b790f8.
目前region的列族數量: 2
/目前region的存儲檔案數量: 2
目前region的存儲檔案占用空間: 0
目前region的存儲檔案的索引資訊的大小: 0
目前region使用的MemStore的大小: 0
目前region的本次統計周期内的TPS: 0
目前region的本次統計周期内的QPS: 0
目前region的本次統計周期内的WPS: 0
<<<<<<<<<<<<<<<<RegionLoad-socialSecurityHDFS,,1532677476603.5ee0df2eee28c9499f55973feab29949.>>>>>>>>>>>>>>>>
regionName: socialSecurityHDFS,,1532677476603.5ee0df2eee28c9499f55973feab29949.
目前region的列族數量: 1
/目前region的存儲檔案數量: 1
目前region的存儲檔案占用空間: 0
目前region的存儲檔案的索引資訊的大小: 0
目前region使用的MemStore的大小: 0
目前region的本次統計周期内的TPS: 0
目前region的本次統計周期内的QPS: 0
目前region的本次統計周期内的WPS: 0
<<<<<<<<<<<<<<<<RegionLoad-socialSecurityTest,,1532671036790.32a018b498fe90f67e4d5f9154132ff8.>>>>>>>>>>>>>>>>
regionName: socialSecurityTest,,1532671036790.32a018b498fe90f67e4d5f9154132ff8.
目前region的列族數量: 2
/目前region的存儲檔案數量: 1
目前region的存儲檔案占用空間: 0
目前region的存儲檔案的索引資訊的大小: 0
目前region使用的MemStore的大小: 0
目前region的本次統計周期内的TPS: 0
目前region的本次統計周期内的QPS: 0
目前region的本次統計周期内的WPS: 0
<<<<<<<<<<<<<<<<RegionLoad-test_create,,1536200222987.a1298f176032256ee51263781abdce80.>>>>>>>>>>>>>>>>
regionName: test_create,,1536200222987.a1298f176032256ee51263781abdce80.
目前region的列族數量: 1
/目前region的存儲檔案數量: 0
目前region的存儲檔案占用空間: 0
目前region的存儲檔案的索引資訊的大小: 0
目前region使用的MemStore的大小: 0
目前region的本次統計周期内的TPS: 0
目前region的本次統計周期内的QPS: 0
目前region的本次統計周期内的WPS: 0
<<<<<<<<<<<<<<<<RegionLoad-test_hbase,,1535079442643.62ebe4c164f1474febc757e8af239b54.>>>>>>>>>>>>>>>>
regionName: test_hbase,,1535079442643.62ebe4c164f1474febc757e8af239b54.
目前region的列族數量: 2
/目前region的存儲檔案數量: 2
目前region的存儲檔案占用空間: 0
目前region的存儲檔案的索引資訊的大小: 0
目前region使用的MemStore的大小: 0
目前region的本次統計周期内的TPS: 0
目前region的本次統計周期内的QPS: 0
目前region的本次統計周期内的WPS: 0
<<<<<<<<<<<<<<<<RegionLoad-test_modify,,1536732559671.ca2e08814243448e6c8742a08c8950e8.>>>>>>>>>>>>>>>>
regionName: test_modify,,1536732559671.ca2e08814243448e6c8742a08c8950e8.
目前region的列族數量: 2
/目前region的存儲檔案數量: 0
目前region的存儲檔案占用空間: 0
目前region的存儲檔案的索引資訊的大小: 0
目前region使用的MemStore的大小: 0
目前region的本次統計周期内的TPS: 0
目前region的本次統計周期内的QPS: 0
目前region的本次統計周期内的WPS: 0
<<<<<<<<<<<<<<<<RegionLoad-test_pre_partition1,