`
uestzengting
  • 浏览: 96192 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hbase region compact源代码阅读笔记

阅读更多
边缘代码略过,核心代码笔记
客户端

1.table_jsp._jspService(HttpServletRequest request, HttpServletResponse response)

调用客户端HBaseAdmin的compact方法来压缩region

//调用HBaseAdmin的功能来完成Region的压缩
HBaseAdmin hbadmin = new HBaseAdmin(conf);
hbadmin.compact(tableName);

2.HBaseAdmin客户端
//判断是对某个Region进行压缩还是对全表进行压缩
isRegionName(tableNameOrRegionName)
//从.META.表里读出HRegionInfo和HServerAddress
Pair pair = MetaReader.getRegion(ct, tableNameOrRegionName);
compact((HServerAddress)pair.getSecond(), (HRegionInfo)pair.getFirst(), major);
//用HServerAddress连上远程HRegionServer,HRegionServer的代理接口就是HRegionInterface
HRegionInterface rs = connection.getHRegionConnection(hsa);
//远程调用压缩Region
rs.compactRegion(hri, major);

RegionServer服务器端

1.HRegionServer
//从HRegionServer的protected final Map onlineRegions = new HashMap();里拿出在线的HRegion
HRegion region = getRegion(regionInfo.getRegionName());
//用compactSplitThread后台线程来处理压缩Region的操作 compactSplitThread.requestCompaction(region, major, (new StringBuilder()).append("User-triggered ").append(major ? "major " : "").append("compaction").toString(), 1);

2.CompactSplitThread
//用一个PriorityCompactionQueue来接收请求
compactionQueue.add(r, priority)
//在CompactSplitThread的run方法里监听PriorityCompactionQueue有没有新的要压缩的Region
r = compactionQueue.poll(this.frequency, TimeUnit.MILLISECONDS);
//调用HRegion的compactStores来压缩Region
byte [] midKey = r.compactStores();

3.HRegion
//循环调用Store的compact进行压缩,并且找出一个size最大的Store做为要分拆的splitRow
          for (Store store: stores.values()) {
            final Store.StoreSize ss = store.compact(majorCompaction);
            lastCompactSize += store.getLastCompactSize();
            if (ss != null && ss.getSize() > maxSize) {
              maxSize = ss.getSize();
              splitRow = ss.getSplitRow();
            }
          }

4.Store

StoreSize compact(final boolean forceMajor) throws IOException
第一步判断是部分合并还是完全合并,首先把Store下面所有的storefiles都赋给filesToCompact,这种就是完全合并;再通过一大段计算和判断,计算出部分合并
List<StoreFile> filesToCompact = this.storefiles;
filesToCompact = new ArrayList<StoreFile>(filesToCompact.subList(start, end));

第二步进行合并,就是把filesToCompact合并成一个临时文件,放到.tmp目录
StoreFile.Writer writer = compact(filesToCompact, majorcompaction, maxId);

第三步提交合并,就是把临时文件writer移动到store目录下,并且将filesToCompact删除,再合并完的sf加到this.storefiles里,并且把filesToCompact从this.storefiles里删除
StoreFile sf = completeCompaction(filesToCompact, writer);

5.StoreFile
Store调用StoreFile的接口来完成文件的读写等操作

6.StoreScaner
Store调用StoreScaner来完成对原有StoreFile的扫描,排序,合并成一个新的文件,这是compact算法的核心
StoreScaner的region compact算法分析可以参考我另一篇博客
http://uestzengting.iteye.com/admin/blogs/1297738
分享到:
评论

相关推荐

    hbase权威指南源代码下载

    在本文中,我们将围绕HBase的核心概念、架构以及如何通过源代码学习进行深入探讨。 HBase,作为Apache Hadoop生态系统的一部分,是一个基于列族的分布式数据库,特别适合处理海量结构化数据。它的设计目标是在廉价...

    hbase0.94java源代码

    这个源代码包是针对Java开发者的宝贵资源,可以帮助他们深入理解HBase的内部工作原理,优化自己的应用,以及对HBase进行定制化开发。 HBase的核心概念包括: 1. 表(Table):HBase的数据存储在表中,每个表由行键...

    VC代码 hbase1.0 (实用代码源).rar

    VC代码 hbase1.0 (实用代码源).rarVC代码 hbase1.0 (实用代码源).rarVC代码 hbase1.0 (实用代码源).rarVC代码 hbase1.0 (实用代码源).rarVC代码 hbase1.0 (实用代码源).rarVC代码 hbase1.0 (实用代码源).rarVC代码 ...

    hbase权威指南源代码

    通过阅读《HBase权威指南》并结合源代码,开发者能够更好地掌握HBase的核心概念和技术,从而在实际项目中有效地运用HBase解决大数据问题。这些源代码实例对于学习HBase的开发、调试和运维都具有很高的参考价值。

    hbase权威指南.源代码

    《HBase权威指南》是一本深入探讨分布式大数据存储系统HBase的专业书籍,其源代码的提供为读者提供了更直观的学习材料。HBase是基于Apache Hadoop的非关系型数据库(NoSQL),它在大规模数据存储方面表现卓越,尤其...

    HBASERegion数量增多问题描述及解决方案.docx

    【HBASERegion数量增多问题描述及解决方案】 在HBase分布式数据库中,Region是表数据的基本存储单元,它将表的数据按照ROWKEY的范围进行分割。随着数据的增长,一个Region会分裂成两个,以此来确保数据的均衡分布。...

    hbase权威指南 源代码 英文

    通过阅读《HBase 权威指南》的源代码,开发者不仅可以理解HBase的设计理念,还能学习到如何利用HBase解决实际问题,提升大数据处理的能力。无论是初学者还是经验丰富的开发者,这本书都将是提升HBase技能的宝贵资源...

    Hbase权威指南 随书源代码 源码包 绝对完整版

    Hbase权威指南 随书源代码 源码包 绝对完整版 maven工程,带pom文件,可以直接作为一个完整工程导入eclipse等ide。

    HBase源代码 hbase-0.98.23

    《深入剖析HBase源代码:hbase-0.98.23》 HBase,作为Apache的一个开源项目,是构建在Hadoop之上的分布式、版本化、列族式的NoSQL数据库,它提供了高可靠性、高性能、可伸缩的数据存储解决方案。本文将基于hbase-...

    hbase操作必备客户端源代码

    hbase操作必备客户端源代码

    hbase权威指南 配套源码

    《HBase权威指南》是一本深入探讨分布式列式数据库HBase的专业书籍,其配套源码提供了书中所提及的示例代码和实践案例,方便读者更好地理解和应用HBase。以下将详细解析HBase的相关知识点。 HBase是建立在Apache ...

    HBase基本操作 Java代码

    HBase基本操作 增删改查 java代码 要使用须导入对应的jar包

    将hdfs上的文件导入hbase的源代码

    通过阅读和理解这段代码,可以深入学习如何在实际项目中将HDFS数据导入HBase,这对于大数据平台的开发和运维人员来说是非常有价值的实践。 总的来说,将HDFS上的文件导入HBase是一个涉及数据处理、数据库设计和编程...

    hbase权威指南源码

    解压后的`hbase-book-master`包含项目的基本目录结构,如`src/main/java`用于存放Java源代码,`src/main/resources`存储资源配置文件,`pom.xml`是Maven项目对象模型,定义了项目的构建过程和依赖关系。 2. **...

    java操作Hbase之Hbase专用过滤器PageFilter的使用源代码

    在Java中操作HBase数据库时,我们经常需要对大量数据进行高效的检索和处理。...提供的源代码应该包含如何创建、应用PageFilter以及处理扫描结果的完整示例,这对于学习和实践HBase的分页查询非常有帮助。

    读书笔记:hbase权威指南学习代码.zip

    读书笔记:hbase权威指南学习代码

    hbase安装包

    HBase,全称为Hadoop Distributed File System上的基础结构(HBase on Hadoop Distributed File System),是一种分布式的、面向列的开源数据库,它构建在Apache Hadoop文件系统(HDFS)之上,提供高可靠性、高性能...

    Hbase的region合并与拆分

    1、region 拆分机制 ...当region大小大于某个阈值(hbase.hregion.max.filesize=10G)之后就会触发切分,一个region等分为2个region。 但是在生产线上这种切分策略却有相当大的弊端:切分策略对于大表和小表没有

    hbase-2.4.17-bin 安装包

    HBase是Apache Hadoop生态系统中的一个分布式、版本化、列族式存储系统,设计用于处理大规模数据集。这个“hbase-2.4.17-bin”安装包提供了HBase的最新稳定版本2.4.17,适用于大数据处理和分析场景。下面将详细介绍...

Global site tag (gtag.js) - Google Analytics