1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.hadoop.hbase.master.balancer;
19
20 import java.util.List;
21 import java.util.Map;
22 import java.util.NavigableMap;
23 import java.util.TreeMap;
24
25 import org.apache.hadoop.hbase.HRegionInfo;
26 import org.apache.hadoop.hbase.ServerName;
27
28
29
30
31 public class ClusterLoadState {
32 private final Map<ServerName, List<HRegionInfo>> clusterState;
33 private final NavigableMap<ServerAndLoad, List<HRegionInfo>> serversByLoad;
34 private boolean emptyRegionServerPresent = false;
35 private int numRegions = 0;
36 private int numServers = 0;
37
38 public ClusterLoadState(Map<ServerName, List<HRegionInfo>> clusterState) {
39 super();
40 this.numRegions = 0;
41 this.numServers = clusterState.size();
42 this.clusterState = clusterState;
43 serversByLoad = new TreeMap<ServerAndLoad, List<HRegionInfo>>();
44
45 for (Map.Entry<ServerName, List<HRegionInfo>> server : clusterState.entrySet()) {
46 List<HRegionInfo> regions = server.getValue();
47 int sz = regions.size();
48 if (sz == 0) emptyRegionServerPresent = true;
49 numRegions += sz;
50 serversByLoad.put(new ServerAndLoad(server.getKey(), sz), regions);
51 }
52 }
53
54 Map<ServerName, List<HRegionInfo>> getClusterState() {
55 return clusterState;
56 }
57
58 NavigableMap<ServerAndLoad, List<HRegionInfo>> getServersByLoad() {
59 return serversByLoad;
60 }
61
62 boolean isEmptyRegionServerPresent() {
63 return emptyRegionServerPresent;
64 }
65
66 int getNumRegions() {
67 return numRegions;
68 }
69
70 int getNumServers() {
71 return numServers;
72 }
73
74 float getLoadAverage() {
75 return (float) numRegions / numServers;
76 }
77
78 int getMaxLoad() {
79 return getServersByLoad().lastKey().getLoad();
80 }
81
82 int getMinLoad() {
83 return getServersByLoad().firstKey().getLoad();
84 }
85
86 }