Hbase-0.98.6源码分析--负载均衡过程

来源:互联网 发布:python scope visiual 编辑:程序博客网 时间:2024/05/23 01:19

       毕业设计做弹性方面的评测,HBase作为分布式数据库,弹性必然是其重点的研究方面,它是如何实现弹性的呢?最重要的一点是它具有负载均衡功能。

       首先,Region在HBase中定义为表按行方向切分的一个个数据区域,交由RegionServer负责管理,并向外提供数据读写服务。如果一个RegionServer上的Region过多,那么该RegionServer对应的就会承担过多的读写等服务请求,也就有可能在高并发访问的情况下,造成服务器性能下降甚至宕机。如此,RegionServer间Region的动态负载均衡,也就成了HBase实现高性能读写请求访问的一个需要解决的问题。那么,Region是如何在RegionServer间动态负载均衡的呢?
        在HMaster中,有几个成员变量定义如下:



        接下来,在finishInitialization()中,开始对上述实体进行初始化:


        在initializeZKBasedSystemTrackers()方法中,


         回到finishInitialization()中 ,


        在getAndStartBalancerChore()方法中,


        再次回到finishInitialization()中,balancer进行初始化

        接下来介绍下BalancerChore类型的成员变量balancerChore,它为一个后台线程,会周期性的调用HMaster的balance()方法,周期性的完成实际的Region的负载均衡。它的定义如下:


        它的父类Chore为HBase中的抽象线程类,HBase中很多工作线程都是继承自Chore,它的run()方法定义如下:


        最后是我们的重点,HMaster的balance()方法:



       这其中比较重要的就是这个迁移计划表的获取:


       紧接着就开始循环处理这个移动计划列表plans,开始移动Region。移动计划的执行,实际上是由assignmentManager的balance()实现的。

0 0