HBase 1.1.3 中如何开发LoadBalance插件
来源:互联网 发布:淘宝重复开店2017处罚 编辑:程序博客网 时间:2024/06/05 11:09
1、继承org.apache.hadoop.hbase.master.LoadBalancer Interface,实现自己的LoadBalancer Class。
2、在hbase-site.xml中增加配置项,使得定制的LoadBalancer生效
<property><name>hbase.master.loadbalancer.class</name><value>{your custom loadbalancer class name}</value><description></description></property>
开发LoadBalancer插件的前提准备工作便是清楚了解org.apache.hadoop.hbase.master.LoadBalancer这个Interface:
public interface LoadBalancer extends Configurable, Stoppable, ConfigurationObserver { /** * Set the current cluster status. This allows a LoadBalancer to map host name to a server * @param st */ void setClusterStatus(ClusterStatus st); /** * Set the master service. * @param masterServices */ void setMasterServices(MasterServices masterServices); /** * Perform the major balance operation * @param clusterState * @return List of plans */ //这个方法是HBase Master内部的balancer线程定期执行调用,用来定期检查并ReBalance集群 List<RegionPlan> balanceCluster(Map<ServerName, List<HRegionInfo>> clusterState) throws HBaseIOException; /** * Perform a Round Robin assignment of regions. * @param regions * @param servers * @return Map of servername to regioninfos */ //这个方法是HBase Master在启动时调用的,用来批量调度所有用户Region到RegionServer上(hbase.master.startup.retainassign设置为false时生效,与retainAssignment互斥) Map<ServerName, List<HRegionInfo>> roundRobinAssignment( List<HRegionInfo> regions, List<ServerName> servers ) throws HBaseIOException; /** * Assign regions to the previously hosting region server * @param regions * @param servers * @return List of plans */ //这个方法是HBase Master在启动时调用的,可以保持上次集群中Region的分布位置不变(hbase.master.startup.retainassign设置为true时生效,与roundRobinAssignment互斥) Map<ServerName, List<HRegionInfo>> retainAssignment( Map<HRegionInfo, ServerName> regions, List<ServerName> servers ) throws HBaseIOException; /** * Sync assign a region * @param regions * @param servers * @return Map regioninfos to servernames */ // 这个方法用来立即将目标regions进行assign,主要是要快速assign,可以暂时忽略均衡问题,交由balancer线程后续定期rebalance解决 Map<HRegionInfo, ServerName> immediateAssignment( List<HRegionInfo> regions, List<ServerName> servers ) throws HBaseIOException; /** * Get a random region server from the list * @param regionInfo Region for which this selection is being done. * @param servers * @return Servername */ // 这个方法是在随机assign一个region时被调用,从当前live的regionservers中选取一个随机的server作为assignregion的目标, ServerName randomAssignment( HRegionInfo regionInfo, List<ServerName> servers ) throws HBaseIOException; /** * Initialize the load balancer. Must be called after setters. * @throws HBaseIOException */ void initialize() throws HBaseIOException; /** * Marks the region as online at balancer. * @param regionInfo * @param sn */ void regionOnline(HRegionInfo regionInfo, ServerName sn); /** * Marks the region as offline at balancer. * @param regionInfo */ void regionOffline(HRegionInfo regionInfo); /* * Notification that config has changed * @param conf */ void onConfigurationChange(Configuration conf);}
重点关注LoadBalancer Interface中的以下几个主要方法:
1、Map<ServerName, List<HRegionInfo>> roundRobinAssignment(List<HRegionInfo>, List<ServerName>)
HBase Master启动时将各个用户Table的Regions依次均匀assign到各个RegionServer中,这个可以参考低版本的DefaultLoadBalancer中的实现或者高版本中的StochasticLoadBalancer、BaseLoadBalancer的实现。
2、Map<ServerName, List<HRegionInfo>> retainAssignment(Map<HRegionInfo, ServerName> regions, List<ServerName> servers)
HBase Master启动时如果发现hbase.master.startup.retainassign设为true了,则不会进行roundRobinAssignment,而是调用这个方法保持上一次集群的region assign方案,这个方法也可以参考低版本的DefaultLoadBalancer中的实现或者高版本中的StochasticLoadBalancer、BaseLoadBalancer的实现。
3、List<RegionPlan> balanceCluster(Map<ServerName, List<HRegionInfo>> clusterState)
HBase Master中Balancer线程定期调用这个方法来进行ReBalance
4、Map<HRegionInfo, ServerName> immediateAssignment(List<HRegionInfo> regions, List<ServerName> servers)
这个方法是用来快速assign region的,无需考虑复杂因素,因此这个方法也可以参考低版本DefaultLoadBalancer中的实现或者高版本中的StochasticLoadBalancer、BaseLoadBalancer的实现。
5、ServerName randomAssignment(List<ServerName> servers),
这个方法是随机选择一个Live的RegionServer来作为assign的目标,因此这个方法也可以参考DefaultLoadBalancer中的实现或者高版本中的StochasticLoadBalancer、BaseLoadBalancer的实现。
- HBase 1.1.3 中如何开发LoadBalance插件
- HBase中如何开发LoadBalance插件
- HBase 中LoadBalancer插件开发
- weblogic中loadbalance的算法
- HBase中如何执行Ruby
- 如何开发 Eclipse 插件
- Neutron如何开发插件?
- 如何开发Xcode插件
- 如何开发jquery插件
- eclipse 插件开发中如何实现刷新和重编译
- eclipse 插件开发中如何实现刷新和重编译
- 如何在 Eclipse 中使用插件构建 PHP 开发环境
- 如何使用Qt插件在Qt中进行ROS开发
- 如何使用Eclipse构建HBase开发环境
- rcp(插件开发) 插件中如何获取MANIFEST.MF 文件,并解析?
- c#插件式程序开发(二):如何在插件中调用主程序资源
- 如何开发Discuz插件(二):文库插件
- 如何简化从hbase中查询数据
- 对象指针
- 游戏基本元素2
- the method of type must override a superclass.
- 搜索框制作--AutoCompleteTextView
- matlab diag 函数
- HBase 1.1.3 中如何开发LoadBalance插件
- 动作
- POP3收取邮件
- HLJ 亲授 装逼技巧 IB_DESIGNABLE 在xib中不通过runtimeAttribute直接修改边的宽度和颜色
- FZU 2037Maximum Value Problem (打表预处理/找规律)
- HTTP响应头和请求头信息对照表
- 原生hessian配置
- 虚拟现实很火,但“虚火”要不得
- 让Linux终端中执行的程序在后台运行