HBase的FlushLargeStoresPolicy多例族支持

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

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


HBase-2.0.0HBase-1.1.0https://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 selectStoresToFlush();

}

 

public class FlushLargeStoresPolicy extends FlushPolicy {

    private boolean shouldFlush(Store store) {

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

            return true;

        }

        

        // 请注意下面这句

        return region.shouldFlushStore(store);

    }

    

    public Collection selectStoresToFlush() {

        Collection stores = region.stores.values();

        Set specificStoresToFlush = new HashSet();

        for (Store store : stores) {

            if (shouldFlush(store)) {

                specificStoresToFlush.add(store);

            }

        }

        

        return specificStoresToFlush;

    }

}

 

public class FlushAllStoresPolicy extends FlushPolicy {

  public Collection selectStoresToFlush() {

    return region.stores.values();

  }

}

 

public class HRegion {

    boolean shouldFlushStore(Store store) {

        if ((maxFlushedSeqId > 0)

           && (maxFlushedSeqId + flushPerChanges 

            return true;

        }

        

        if (flushCheckInterval 

            return false;

        }

        

        long now = EnvironmentEdgeManager.currentTime();

        if (store.timeOfOldestEdit() 

            return true;

        }

        

        return false;

    }

}

相关实践学习
云数据库HBase版使用教程
  相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情: https://cn.aliyun.com/product/hbase   ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
12天前
|
数据采集 机器学习/深度学习 分布式数据库
协处理器和自定义 Coprocessor Endpoint 的使用场景
协处理器和自定义 Coprocessor Endpoint 的使用场景
|
2月前
|
SQL Java 数据库连接
Flink扩展问题之jdbc connector扩展失败如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。
|
11月前
|
存储 分布式计算 关系型数据库
|
存储 算法 调度
Zookeeper是什么,它有什么特性与使用场景?
Zookeeper是什么,它有什么特性与使用场景?
835 0
|
存储 分布式数据库 数据库
HBase的优缺点
HBase的优缺点
425 0
|
存储 Java 数据库
OceanBase 源码解读(九):存储层代码解读之「宏块存储格式」
此前,带你读源码第八篇《事务日志的提交和回放》,为大家介绍了日志模块的设计理念和日志的一生。本期“源码解读”由数据库技术专家公祺为大家带来“存储层代码解读之「宏块存储格式」”
415 0
OceanBase 源码解读(九):存储层代码解读之「宏块存储格式」
|
SQL 存储 大数据
Hive架构优点及使用场景
先阅读初识hive Hive在大数据生态环境中的位置 Hive架构图 client 三种访问方式 1、CLI(hive shell)、command line interface(命令行接口) 2、JDBC/ODBC(ja.
9769 0
|
存储 分布式数据库 数据库
|
缓存 大数据 分布式数据库
HBase技术与应用实践 | HBase2.0重新定义小对象实时存取
本次分享来自中国HBase技术社区第七届MeetUp成都站,分享嘉宾天引 阿里巴巴 技术专家专注在大数据领域,拥有多年分布式、高并发、大规模系统的研发与实践经验,先后参与HBase、Phoenix、Lindorm等产品的内核引擎研发,目前负责阿里上万节点的HBase As a Service的发展与落地。
2010 0