借鉴于LevelDB、Cassandra的Compaction方法,https://issues.apache.org/jira/browse/HBASE-7667 提出了Stripe Compaction的方法。
Motivation:
1)过多Region会增大RS维护的开销,降低RS的读写性能。随着数据量的增大,在一定程度上增加Region个数,会提高系统的吞吐率。然而,RS上服务的Region个数增多,增加了RS下内存维护的开销,尤其每个Store下都配置有一个MemStore,从而会造成频率更高的Flush操作,影响系统的读写性能。因此,如果能够提出更轻量级的mini-Region,不仅能够降低服务多个Region的开销,而且能够提升读写数据的效率。
2) Region Compaction容易”放大”。例如,Region区间为[1FFF,2FFF),在该区间内仅有[1FFF,21FF)区间有大量的写操作(put、delete),但是,在触及MajorCompaction条件时,却需要对所有的文件执行Major Compaction,从而引起大量的IO。
3) Region Split操作代价较大。
需要了解之前HBase的Compaction与Flush过程,可以参考:HBaseCompaction机制 以及 HBase Flush对读写的影响
Stripe-Compaction设计的核心思想:
1)对于Region下的rowkey区间进行二次切分,例如[1FFF,2FFF),切分成[1FFF,24FF),[24FF,2FFF)两个区间,每个区间成为Stripe。
2)Region下的数据文件分为Level-0和Level-1两层。其中Level-0主要用来存储临时的数据文件(例如使用bulkload或者执行mem flush操作之后的数据), Level-1层的数据是按照Stripe的分区来区分。
3)支持两种方式的配置:Mini-regions的个数设置、或者以Size-based为大小触发因子的自动切分机制。
4)容错机制。如果在Stripes之间存在空洞。那么可以根据在Store当中的设置,将所有的处于Level-1层的文件回归到Level-0重新进行compaction。
5)Get操作时,一个Row所涉及到文件有:MemStore、Level-0下所有文件、以及Level-1下对应Stripe区下的文件。根据Stack的意见,最终Level-0下的文件只是一个暂时的状态,大部分文件都位于Level-1 Stripe下,因此,这样随机读时,需要涉及到的文件更聚集。
6)Scan操作时,需要定位startrow即可。在扫描过程中,会按照Stripe的row区间的排序,依次进行。
7)Compaction,是Level-0上升到Level-1的过程,同时,在Level-1层次的数据,也会进行相关的合并。
8)在Split操作时,定位Rowkey区间的中心点,可以根据Stripe记录的位置,进一步查找,因此,使用预置的Stripe会有利于Split操作的进行,可以实现多数HFile文件直接拷贝到子Region目录,从而加快了Split操作的效率。
下面对于Cassandra以及LevelDB中使用的多层次Compaction算法做一个介绍。
1)分层式压缩方式将数据分成条个层,最底层的叫L0,其上分别是L1,L2….,每一层的数据大小是其上的那一层数据最大大小的10倍,其中最底层L0的大小为5M (可以配置)
2) 当level层次大于0时,同一层的各个文件之间的Rowkey区间不会重叠。所以在level n与level n+1的数据块进行合并时,可以明确的知道某个key值处在哪个数据块中,可以一个数据块一个数据块的合并,合并后生成新块就丢掉老块。不用一直到所有合并完成后才能删除老的块。
3)整体执行流程是从L0->L1->L2,依次合并的过程,如下图所示。
由上图,我们可以得知,越是level较低的块,它的数据就越新,在满足向下归约合并的过程中,就会按照文件的Rowkey的区间,进行合并,去除多余的版本,或者执行相关删除操作。因此,在读请求最极端的情况下,从Level0开始读数据,一直读到最下层Level n。
这种Compaction的优势在于:
1)大部分的读操作如果有LRU特性,都会落入较低的Level上。因此,数据越"热",Level就越低。从而有利于未来HFile多种存储介质的定位问题。
2)在合并的过程中,仅需在由上到下的部分文件参与,而不是要对所有文件执行Compaction操作。这样会加快Compaction执行的效率。
劣势在于,如果层次太多,在递归合并的过程中,容易造成某个区间的Compaction风暴,影响该区间数据操作的吞吐。
因此,HBase-Stripe Compaction的方案中,只有两层,Level 0和Level1,这种方法在保留分层压缩的优势的同时,降低了总文件个数,有利于RS执行Split、Merge等操作。
参考文献:
[1] HBase-7667 https://issues.apache.org/jira/browse/HBASE-7667
本系列文章属于Binos_ICT在Binospace个人技术博客原创,原文链接为http://www.binospace.com/index.php/hbase-new-features-stripe-compaction,未经允许,不得转载。
From Binospace, post HBase新特性—Stripe Compaction
文章的脚注信息由WordPress的wp-posturl插件自动生成
相关推荐
HBase In-Memory Compaction HBase In-Memory Compaction是HBase存储系统中的一种高性能的存储机制,它基于Log-Structured-Merge(LSM)树设计,通过将数据存储在内存中,减少磁盘I/O操作,提高写入吞吐量和读取...
将HBase作为研究对象,分析其存储架构,针对HBase存储机制进行深入研究
3. 新功能引入:可能包含新的API或特性,以适应更多应用场景。 4. 安全性增强:提供更完善的权限控制和安全机制。 5. 兼容性提升:可能对Hadoop和其他生态系统组件的兼容性进行了优化。 6. 监控与管理:改进了...
HortonWorks 介绍HBase的企业级应用,以及HBase最新特性 HortonWorks 介绍HBase的企业级应用,以及HBase最新特性 HortonWorks 介绍HBase的企业级应用,以及HBase最新特性
2. 创建表并指定列族属性:创建一个新表,指定需要使用MOB特性的列族。例如: ``` create 'ImagesTable', 'Images', {NAME => 'ImageData', VERSIONS => 1, BLOCKCACHE => true, COMPRESSION => 'NONE', MOB_...
例如,`put`方法用于向表中写入新的数据,`delete`方法根据行键删除一行,`update`方法则可以更新已有数据。 6. **事务管理**:HbaseTemplate也支持HBase的事务管理。尽管HBase自身并不完全支持ACID事务,但Hbase...
### HBase权威指南知识点概述 #### 一、引言与背景 ...该书不仅详细解释了HBase的工作原理和关键特性,还提供了大量的实际应用场景案例,对于希望利用HBase解决大数据问题的读者来说具有极高的参考价值。
HBase的特性与生态:自动分区、LSM Tree、存储...全新的HBase2.0版本新功能:小对象存储MOB、读写链路Off-heap 、Region Replica 、In Memory Compaction 、Assignment MangerV2 、其他;HBase未来规划。 主要章节:
HBase社区在2013年推出的StripeCompaction特性(HBASE-7667),旨在通过更加灵活的文件分区来提升Compaction性能。它将每个region/store的键范围划分为多个stripes,每个stripe可以单独进行Compaction。...
3. Compaction:定期进行Compaction清理旧版本和合并文件,减少数据冗余,提高读取效率。 4. Bloom Filter:使用Bloom Filter可以减少不必要的磁盘I/O,提高查询性能。 5. Indexing:虽然HBase本身不支持索引,但...
同时,HBase还支持Compaction操作,通过`org.apache.hadoop.hbase.regionserver.StoreFileCompactor`类合并多个StoreFile以减少I/O开销。 总之,通过对hbase-0.98.23源代码的深入学习,我们可以了解到HBase如何实现...
3. **HBase的Compaction**:Compaction是HBase中用于合并HFile的过程,目的是减少Region内的文件数量,提高读取效率。有两种类型的Compaction:Minor和Major,前者只合并同一Region的小文件,后者会合并所有文件,...
6. **Compaction**:为了减少磁盘I/O和提高读取性能,HBase会定期执行Compaction操作,合并Region中的多个StoreFile为一个更少的文件。 7. **Bulk Load**:HBase支持批量加载大量数据,这可以通过MapReduce任务实现...
**HBase实验报告** 在本实验中,我们主要聚焦于HBase,这是一个基于谷歌Bigtable设计的开源...在后续的学习和实践中,应深入研究HBase的其他高级特性,如Region Split、Compaction等,以便更好地应用到实际项目中。
《HBase资源合集》包含了四本重量级的书籍,分别是《HBase企业应用开发实战》、《HBase权威指南》、《HBase实战》以及《HBase应用架构》。这些书籍深入浅出地探讨了HBase在大数据环境中的应用与开发,是学习和掌握...
读者将了解到HBase如何在大规模集群上提供实时的数据访问,并理解HBase的核心特性,如表的设计、数据模型、行键与列族的概念。 接着,书中会详细讲解HBase的安装和配置,包括集群部署、资源管理和性能优化策略。这...
HBase社区2018精选资料的知识点涵盖了HBase生态系统的多个方面,包括HBase的基本概念、架构、组件、应用案例、技术实践、性能优化策略、新特性、平台实践以及社区动态等。HBase是一个高性能的开源NoSQL数据库,属于...