HBase

架构设计

核心概念:

Client:发起读写请求的角色,面向hbase client 编程 

              首先hbase查询Meta表,找到读或写的数据的region区域位置信息

              然后向region对应的HRegionServer上发送读写请求 

zookeeper:存储Hbase源数据放置的位置

                     负责HMaster的选择和主备切换

                     负责对HRS进行监控

                     对RootRegion的管理,挤兑meta表所载数据存储的region的管理

                     region管理普通region的上下线等状态信息管理

                     分布式SplitWAL能力

Hmaster:管理用户对表的增删改查操作

                管理HRS,实现其负载均衡,调整Region分布

                管理和分配Region :fegion分裂后,负责新region的分配

HRegionServer

                维护本地的Region,并处理客户端对这些region读写的io请求

                负责切分本地Region,当StoreFIle大小超过阈值,则会触发分割操作,

                内部管理这一系列HR对象,每一个HR对象对应着表中region        

                Hregion有多个HStore 组成,每一个Hstore对应的一个列族

HRegion:table在行(水平)方向上分隔为多个region

                region是HB中分布式存储和负载均衡的最小单元,不同的region可以分别在不同的ReregionServer上,

每个region由以下信息标识:< 表名,startRowkey,创建时间>

Hstore:HB存储得核心,主要由MenStore和StoreFile组成

MemStore就是 SortedMemory Buffer,⽤户写⼊的数据⾸先会 放在这个内存缓存中,当缓冲区满了以后,flush 到StoreFile (底层是HFile)中,当StoreFile⽂件数达到阀值会触发 Compact操作,将多个StoreFile进⾏合并,合并成⼀个⼤的 StoreFile。 ○ 合并过程中会进⾏版本的合并和数据删除,因此所有的更新和删 除操作(标记删除)都是在compact阶段完成的,这使得⽤户的写 操作只要写⼊内存就可以⽴即返回,保证HBase I/O⾼性能。 当合并之后的StoreFile超过阀值,则会触发HRegion的split操 作,将⼀个HRegion分成2个HRegion,⽼的HRegion会被下线, 新的会被HMaster分配到对应的HRegionServer上,可能是当前 HRegionServer也有可能是其他HRegionServer上。

MemStore:放在内存里的,保存修改的数据即KeyValues

StoreFile:memStore内存中的数据写到文件后就是StoreFIle,底层是以HFile格式保存

Hfile:当MenStore累积到足够的数据是,整个已排序的keyValue集江北写入HDFS中的xinfile,期为顺序写入,速度非常快

MinorCompation:  

                hb会自动选择一些较小的StoreFIle,并将他们重写成更少且更大的StoreFIle,该工程陈伟Minor Compation

Major Compaction:

        将region所有的StoreFile合并,并重写到一个StoreFIle,

Wal:先写日志的意思

HLOG:用来做灾难恢复使用,物理上是一个squencefile,每个HRegionServer只有一个Hlog,该Hlog归该HrefionServer下的所有HRregin共享

Hbase写流程

1)获取。METAdeRootRegion位置信息:

在客户端写进程内,第一次写时,CLient先通过zookeeper获取从MTEA表对应的region位置信息,并加入到进程缓存中,后续再度或再写是,直接读取缓存的meta信息对应的region信息即可。

2)找到数据到写到那个region上

根据上边获取得到的ROotregion位置信息,请求region所在的region server 服务,根据 namespace。表名,rowkey,根据meta表的数据找到写入数据对应的refgion信息。找到小于rowkeu并且最接近rowkey的startkey对象的region,及为目标region信息

3)发起实际的写入请求

向region对应的region server发起写入请求

4)WAL log写入

将插入/更新写去WAL中,当客户端发起put/delete请求是,考虑到写入内存MEnstore会有对视数据的风险,因此在写入缓存钱,hBase会先写入到WriteAheadLog中,那么即使发生宕机,也可以通过WAL 还原初始数据

5)memstore写入与StoreFile落盘

将更新写入menstore中,当增加到一定大小,达到预设的FLushsize阈值是,会触发flush memstore,把menstore中的数据写出到hdfs,生成一个storefile

6)StoreFIle合并

随着storefile文件的不断增多,当增长到一定阈值后,出发compact合并操作,将多个storefile合并成一个,同事进行版本合并和数据删除。

7)Region拆分

单个storefile大小超过一定阈值后,出发split操作,把当前region拆分成两个,新拆分的2个region会被hbasemaster分配到相应的2个regionserver上。

4 hbase读流程

1)获取meta的rootregion信息

客户端读进程内,第一次读,client先通过zookeeper获取从MEta表对应的region位置信息,并加入到进程缓存中,后续再读或再写时,直接读取缓存的meta信息对应的region信息即可。

2)找到数据要写到那个region上

更具上边rootregion的位置信息,请求region server服务,根据namespace,表名 rowkey 根据meta表的数据找到写入数据对应的region信息。找到小于rowkey并且最接近rowkey的startkey对应region,及为目标region信息

3)发起实际的读取请求

向region对应的regionserver发起读取请求

4)先从memstore中查找数据,如果找到则返回

5)再从blockcache中查找数据,如果找到则返回

6)再从storefile中查找数据,如果找到则返回,如果没有找到则返回null

如果是从storefile中读取到的数据,则要写入blockcache后在返回给客户端。

                

       

04-28
### HBase 的使用指南与教程 #### 1. 学习资源推荐 对于希望深入学习 HBase 的用户来说,有几本经典书籍可以作为参考资料。例如,《HBase: The Definitive Guide》是一本覆盖范围广泛的参考书,适合初学者和中级学习者[^1]。如果更倾向于实践案例,则可以选择《HBase in Action》,该书专注于实际应用场景,更适合有一定开发经验的技术人员[^1]。 #### 2. 命令行工具 HBCK2 使用说明 HBCK2 是 HBase 提供的一个修复工具,主要用于解决元数据一致性问题和其他潜在的数据损坏情况。要运行 HBCK2,可以通过 `$HBASE_HOME/bin/hbase` 脚本来启动,并指定 `-j` 参数来加载对应的 JAR 文件。具体命令如下: ```bash ${HBASE_HOME}/bin/hbase --config /etc/hbase-conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-xxx.jar ``` 默认情况下,如果不加特殊参数,执行 `hbck` 将会调用旧版本的修复工具(即 HBCK1)。因此,在需要高级功能时务必显式指明路径[^2]。 #### 3. 集成 Spark 和 HBase (HBase-RDD) 为了简化大数据处理流程中的复杂操作,社区还提供了专门针对 Apache Spark 设计的支持库——HBase-RDD。此项目允许开发者创建自定义逻辑轻松读取、写入甚至删除存储在 HBase 中的内容。更多详情可访问官方仓库链接获取最新文档和支持信息[^3]: [https://gitcode.com/gh_mirrors/hb/hbase-rdd](https://gitcode.com/gh_mirrors/hb/hbase-rdd) #### 4. Zookeeper 在 HBase 架构中的角色 值得注意的是,Zookeeper 对于整个 HBase 生态系统至关重要。它不仅负责协调多个节点之间的通信,而且承担着诸如选举 Master 实例、维护 RegionServer 注册表等功能。通过采用 Zap 协议保障集群内部状态同步一致,从而减少应用程序层面额外的工作量[^4]。 以下是基于 Java 编程语言连接到远程 HBase 表格实例的一个简单例子: ```java Configuration config = HBaseConfiguration.create(); config.set("hbase.zookeeper.quorum", "localhost"); try(Connection connection = ConnectionFactory.createConnection(config)){ Table table = connection.getTable(TableName.valueOf("myTable")); Get get = new Get(Bytes.toBytes("rowKeyExample")); Result result = table.get(get); byte[] value = result.getValue(Bytes.toBytes("columnFamily"), Bytes.toBytes("qualifier")); } catch(IOException e){ System.err.println(e.getMessage()); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值