关键词:hbase rebalance 负载均衡

参考源码版本:apache-hbase-1.1.2

什么是HBase Rebalance ?

随着数据写入越来越多以及不均衡,即使一开始每个RegionServer的region数差不多,后期也会出现较为明显的差异现象。如果不做均衡,region过多的RS就有可能成为热点服务器,成为瓶颈。因此rebalance相当于一个负载调整的过程,把负载重的RS的部分region分发出去给别的RS去分担region压力。

Rebalance 策略

Rebalance由HMaster触发,因此主要代码在 org.apache.hadoop.hbase.master.balancer 下。配置 hbase.master.loadbalancer.class。

主要有三种策略:

  • StochasticLoadBalancer . 默认策略,是一种综合的计算方法,考虑了六个因素(具体逻辑可看代码或参考 http://openinx.github.io/2016/06/21/hbase-balance):

    • 每台RegionServer读请求数(ReadRequestCostFunction)
    • 每台RegionServer写请求数(WriteRequestCostFunction)
    • 每台RegionServer的Region个数(RegionCountSkewCostFunction)
    • 移动代价(MoveCostFunction)
    • 数据locality(TableSkewCostFunction)
    • 每张表占据RegionServer中region个数上限(LocalityCostFunction)
  • SimpleLoadBalancer.
  • FavoredNodeLoadBalancer.

Rebalance 触发

HMaster会有个BalancerChore定时类去检查触发,间隔时间:hbase.balancer.period (dft 300000=5min) 。当然HBaseAdmin或shell也提供了命令接口可以手动触发。

Rebalance 方式

有两种方式,默认是把当前RS的region混在一起去rebalance,若hbase.master.loadbalance.bytable=true,则会按照一个表一个表来rebalance,这样至少可以确保某些表中途是rebalance完的。有人会称后者为表级rebalance,但实际上这并不是纯粹的表级rebalance,如果你真的只想触发某个表的rebalance,可能得考虑自定义策略去过滤其他表的region并且将上述bytable配置配置为true。(然而从平台角度来说,这并不是一种鼓励的做法,毕竟一般情况下所有表都需要负载均衡服务)

HBase rebalance 负载均衡源码角度解读使用姿势的更多相关文章

  1. CentOS 6.5 + Nginx 1.8.0 + PHP 5.6(with PHP-FPM) 负载均衡源码安装

    CentOS 6.5 + Nginx 1.8.0 + PHP 5.6(with PHP-FPM) 负载均衡源码安装 http://www.cnblogs.com/ppoo24/p/4918288.ht ...

  2. 小D课堂 - 新版本微服务springcloud+Docker教程_4-03 高级篇幅之Ribbon负载均衡源码分析实战

    笔记 3.高级篇幅之Ribbon负载均衡源码分析实战     简介: 讲解ribbon服务间调用负载均衡源码分析         1.完善下单接口         2.分析@LoadBalanced ...

  3. Tars | 第2篇 TarsJava SpingBoot启动与负载均衡源码初探

    目录 前言 1. Tars客户端启动 @EnableTarsServer 2. Communicator通信器 3. 客户端的负载均衡调用器LoadBalance 最后 前言 通过源码分析可以得出这样 ...

  4. CentOS 6.5 + Nginx 1.8.0 + PHP 5.6(with PHP-FPM) 负载均衡源码安装 之 (三)Nginx负载均衡配置

    Nginx反向代理到单个PHP-FPM(PHP-FPM可位于不同机器) 0.首先,创建我们的网站根目录[注:须在PHP-FPM所在的那台机器创建](以后网站的代码放到此目录下): mkdir /opt ...

  5. CentOS 6.5 + Nginx 1.8.0 + PHP 5.6(with PHP-FPM) 负载均衡源码安装 之 (二)PHP(PHP-FPM)安装篇

    编译安装PHP及内置PHP-FPM nginx本身不能处理PHP,它只是个web服务器,当接收到请求后,如果是php请求,则发给php解释器处理,并把结果返回给客户端(浏览器). nginx一般是把请 ...

  6. CentOS 6.5 + Nginx 1.8.0 + PHP 5.6(with PHP-FPM) 负载均衡源码安装 之 (一)Nginx安装篇

    CentOS 6.5 minimal安装不再赘述 Nginx源码安装 1.安装wget下载程序 yum -y install wget 2.安装编译环境:gcc gcc-c++ automake au ...

  7. CentOS 6.5 + Nginx 1.8.0 + PHP 5.6(with PHP-FPM) 负载均衡源码安装 之 (四)问题汇总

    关于外网无法访问虚拟机centos的问题 此一般由于centos默认防火墙配置,导致外部不允许访问80端口(或其他如9000端口).解决方法如下: 1.加入80端口的防火墙规则 /sbin/iptab ...

  8. Android进阶:二、从源码角度看透 HandlerThread 和 IntentService 本质

    上篇文章我们讲日志的存储策略的时候用到了HandlerThread,它适合处理"多而小的任务"的耗时任务的时候,避免产生太多线程影响性能,那这个HandlerThread的原理到底 ...

  9. Hbase WAL线程模型源码分析

    版权声明:本文由熊训德原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/257 来源:腾云阁 https://www.qclo ...

随机推荐

  1. day 25-1 接口类、抽象类、多态

    # 接口类:python 原生不支持# 抽象类:python 原生支持的 接口类 首先我们来看一个支付接口的简单例子 from abc import abstractmethod,ABCMeta #我 ...

  2. 本地Git与Github建立关联

    准备 本地与Github建立连接,需要用到SSH公钥.一般安装完Git,会在用户目录中生成一个 .ssh的文件夹 如果没有此文件夹,可以通过命令创建 $ ssh-keygen -t rsa -C &q ...

  3. [转]ANR问题分析指南

    引言 每天收到无数的兄弟团队的同事向系统转ANR JIRA,有些一旦遇到App ANR就直接转到系统组,有些简单看一下就转到系统组帮忙看一下.如此浩瀚的JIRA,我们什么事不做也处理不过来,请每个Ap ...

  4. 搜索表字段包含某字符串的SQL和监控Oracle数据库的SQL。

    1.第一个SQL 背景:需要找到SQL Server数据库中,包含某个字符串的表,输出表和包含该字符串的列. )='=' --这里填要搜索的字符串 DECLARE @sql NVARCHAR(MAX) ...

  5. HDU - 1036

    题意描述很垃圾,后来看别人代码才知道怎么回事:对(题目所给d/总时间:所有时间加起来)四舍五入并取整,然后对结果/60得到用了几分钟:对结果%60得到用了几秒. presentation error一 ...

  6. kafka 重新分配partition

    登陆kafka manager 进入相关topic 点击generate partition assignments 点击reassign partirons

  7. Mark SDL2 Lazy Foo's Producations

    重点 初学SDL2,此处为笔记.有错误还请指出. 13)When our SDL 2 application runs, the operating system needs to be able t ...

  8. C#实现在foreach中删除集合中的元素

    List<string> str = new List<string>(); str.Add( "zs"); str.Add("ls") ...

  9. tp5.1入口文件隐藏

    修改.htaccess文件 <IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews RewriteEngine On Re ...

  10. 在Vue中使用样式

    ##使用class样式 一共四种方式在注释中有解释 <!DOCTYPE html> <html> <head> <meta charset="utf ...