[ 
https://issues.apache.org/jira/browse/HBASE-12829?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Andrew Purtell resolved HBASE-12829.
------------------------------------
    Resolution: Not A Problem

> Request count in RegionLoad may not accurate to compute the load cost for 
> region
> --------------------------------------------------------------------------------
>
>                 Key: HBASE-12829
>                 URL: https://issues.apache.org/jira/browse/HBASE-12829
>             Project: HBase
>          Issue Type: Improvement
>          Components: Balancer
>    Affects Versions: 0.99.2
>            Reporter: Jianwei Cui
>            Priority: Minor
>
> StochasticLoadBalancer#RequestCostFunction(ReadRequestCostFunction and 
> WriteRequestCostFunction) will compute load cost for a region based on a 
> number of remembered region loads. Each region load records the total count 
> for read/write request at reported time since it opened. However, the request 
> count will be reset if region moved, making the new reported count could not 
> represent the total request. For example, if a region has high write 
> throughput, the WrtieRequest in region load will be very big after onlined 
> for a long time, then if the region moved, the new WriteRequest will be much 
> smaller, making the region contributes much smaller to the cost of its 
> belonging rs. We may need to consider the region open time to get more 
> accurate region load. 
> As another way, how about using read/write request count at each time slots 
> instead of total request count? The total count will make older read/write 
> request throughput contribute more to the cost by 
> CostFromRegionLoadFunction#getRegionLoadCost:
> {code}
>     protected double getRegionLoadCost(Collection<RegionLoad> regionLoadList) 
> {
>       double cost = 0;
>       for (RegionLoad rl : regionLoadList) {
>         double toAdd = getCostFromRl(rl);
>         if (cost == 0) {
>           cost = toAdd;
>         } else {
>           cost = (.5 * cost) + (.5 * toAdd);
>         }
>       }
>       return cost;
>     }
> {code}
> For example, assume the balancer now remembers three loads for a region at 
> time t1, t2, t3(t1 < t2 < t3), the write request is w1, w2, w3 respectively 
> for time slots [0, t1), [t1, t2), [t2, t3), so the WriteRequest in the region 
> load at t1, t2, t3 will be w1, w1 + w2, w1 + w2 + w3 and the WriteRequest 
> cost will be:
> {code}
>     0.5 * (w1 + w2 + w3) + 0.25 * (w1 + w2)  + 0.25 * w1 = w1 + 0.75 * w2 + 
> 0.5 * w3
> {code}
> The w1 contributes more to the cost than w2 and w3. However, intuitively, I 
> think the recent read/write throughput should represent the current load of 
> the region better than the older ones. Therefore, how about using w1, w2 and 
> w3 directly when computing? Then, the cost will become:
> {code}
>     0.25 * w1 + 0.25 * w2 + 0.5 * w3
> {code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to