Ted Yu explains the internals of the HBase load balancing with references to corresponding JIRA tickets and the latest improvements:
If at least one region server joined the cluster just before the current balancing action, both new and old regions from overloaded region servers would be moved onto underloaded region servers. Otherwise, I find the new regions and put them on different underloaded servers. Previously one underloaded server would be filled up before the next underloaded server is considered.
I am planning for the next generation of load balancer where request histogram would play an important role in deciding which regions to move.
HBase load balancing has also been discussed in this (older) conversation on the mailing list.
Original title and link: HBase Load Balancing Explained (NoSQL databases © myNoSQL)