众所周知,HBase的一个例族flush时,会导致所有例族都跟着被flush。在HBase-0.94的官方说明(http://hbase.apache.org/0.94/book/number.of.cfs.html)也明确HBase不能很好的支持一个以上的例族。

HBase-2.0.0和HBase-1.1.0(https://issues.apache.org/jira/browse/HBASE-10201)引入FlushLargeStoresPolicy来解决这个问题。

FlushLargeStoresPolicy的实现非常简单,就是在flush之前先判断下Store的大小,当超过指定大小时才flush(注:实际上不仅仅受此决定,具体可查看HRegion类的shouldFlushStore()的实现)。

相关的类(之前只有FlushAllStoresPolicy一种flush策略,也就是flush一个例族时也会flush其它所有例族):

flush过程:

相关源代码:

public abstract class FlushPolicy {

protected HRegion region;

protected void configureForRegion(HRegion region) {

this.region = region;

}

public abstract Collection<Store> selectStoresToFlush();

}

public class FlushLargeStoresPolicy extends FlushPolicy {

private boolean shouldFlush(Store store) {

if (store.getMemStoreSize() > this.flushSizeLowerBound) {

return true;

}

// 请注意下面这句

return region.shouldFlushStore(store);

}

public Collection<Store> selectStoresToFlush() {

Collection<Store> stores = region.stores.values();

Set<Store> specificStoresToFlush = new HashSet<Store>();

for (Store store : stores) {

if (shouldFlush(store)) {

specificStoresToFlush.add(store);

}

}

return specificStoresToFlush;

}

}

public class FlushAllStoresPolicy extends FlushPolicy {

public Collection<Store> selectStoresToFlush() {

return region.stores.values();

}

}

public class HRegion {

boolean shouldFlushStore(Store store) {

if ((maxFlushedSeqId > 0)

&& (maxFlushedSeqId + flushPerChanges < sequenceId.get())) {

return true;

}

if (flushCheckInterval <= 0) {

return false;

}

long now = EnvironmentEdgeManager.currentTime();

if (store.timeOfOldestEdit() < now - flushCheckInterval) {

return true;

}

return false;

}

}

HBase的FlushLargeStoresPolicy多例族支持的更多相关文章

  1. HBase最佳实践-列族设计优化

    本文转自hbase.收藏学习下. 随着大数据的越来越普及,HBase也变得越来越流行.会用HBase现在已经变的并不困难,然而,怎么把它用的更好却并不简单.那怎么定义'用的好'呢?很简单,在保证系统稳 ...

  2. Hbase之尝试使用错误列族获取数据

    import com.google.common.base.Strings; import org.apache.hadoop.conf.Configuration; import org.apach ...

  3. hbase java api样例(版本1.3.1,新API)

    hbase版本:1.3.1 目的:HBase新API的使用方法. 尝试并验证了如下几种java api的使用方法. 1.创建表 2.创建表(预分区) 3.单条插入 4.批量插入 5.批量插入(客户端缓 ...

  4. 深入学习hbase:表,列族,列标识,版本和cell

    HBase是面向列的分布式的数据库,和传统的关系型数据库有很大的不同:物理模型和逻辑模型.这里我们要首先讲一下HBase数据库相关的区别于关系型数据库的几个基本概念:          表:HBase ...

  5. HBase Filter程序样例及Shell(图)

    ==过滤器执行流程== reset() : reset the filter state before filtering a new row. filterAllRemaining(): true ...

  6. 用MapReduce读HBase写MongoDB样例

    1.版本信息: Hadoop版本:2.7.1 HBase版本:1.2.1 MongDB版本:3.4.14 2.HBase表名及数据: 3.Maven依赖: <dependency> < ...

  7. 阿里云HBase推出普惠性高可用服务,独家支持用户的自建、混合云环境集群

    HBase可以支持百TB数据规模.数百万QPS压力下的毫秒响应,适用于大数据背景下的风控和推荐等在线场景.阿里云HBase服务了多家金融.广告.媒体类业务中的风控和推荐,持续的在高可用.低延迟.低成本 ...

  8. Hbase总结(一)-hbase命令,hbase安装,与Hive的区别,与传统数据库的区别,Hbase数据模型

    Hbase总结(一)-hbase命令 下面我们看看HBase Shell的一些基本操作命令,我列出了几个常用的HBase Shell命令,如下: 名称 命令表达式 创建表 create '表名称', ...

  9. 【甘道夫】HBase(0.96以上版本号)过滤器Filter具体解释及实例代码

    说明: 本文參考官方Ref Guide,Developer API和众多博客.并结合实測代码编写.具体总结HBase的Filter功能,并附上每类Filter的对应代码实现. 本文尽量遵从Ref Gu ...

随机推荐

  1. malloc/free与new/delete的不同及注意点

    #include<iostream> using namespace std; class Obj{ public : Obj(){cout<<"Initializa ...

  2. jeecg中的树形控件demo

    1.comboTree控件 1.页面方法: <t:comboTree url="jeecgFormDemoController.do?getComboTreeData" va ...

  3. Python VIL Service Bin

    #!/usr/bin/python #coding:UTF-8 import sys import re import getopt import md5 import os import subpr ...

  4. <只看这个就够了。。。>Android自动化测试及性能优化

    Android自动化测试及性能优化 分类: Android Java Tools2012-12-09 23:31 4300人阅读 评论(0) 收藏 举报 软件自动化测试对于程序员来说能够确保软件开发的 ...

  5. PAT 甲级 1010 Radix (25)(25 分)进制匹配(听说要用二分,历经坎坷,终于AC)

    1010 Radix (25)(25 分) Given a pair of positive integers, for example, 6 and 110, can this equation 6 ...

  6. [Octave] optimset()

    Create options struct for optimization functions. optimset('parameter', value, ...); %设置所有参数及其值,未设置的 ...

  7. EasyUI汇总

    easyui combobox添加清除选项按钮 <input class="easyui-combobox" name="appType" data-op ...

  8. curl获取响应时间

    1.开启gzip请求curl -I http://www.sina.com.cn/ -H Accept-Encoding:gzip,defalte 2.监控网页的响应时间curl -o /dev/nu ...

  9. 在 ubuntu1604 中 搭建 i 屁 sec 虚拟专用连接服务器

    1.wget https://git.io/vpnsetup -O vpnsetup.sh 2.vim vpnsetup.sh 修改一些内容: 主要有三个参数:IPSEC的预共享秘钥,用户名,密码 3 ...

  10. Win10 安装 及应用遇到的问题

    IOS https://www.microsoft.com/zh-cn/software-download/techbench setup win10安装必须用administrator账号安装 在w ...