HBase工作机制

1,hbase regionserver 向zookeeper注册,提供hbase regionserver状态信息(是否在线)
2,hmaster启动时候会将hbase 系统表-ROOT- 加载到 zookeeper cluster,通过zookeeper cluster可以获取当前系统表.META.的存储所对应的regionserver信息。
HMaster主要作用在于,通过HMaster维护系统表-ROOT-,.META.,记录regionserver所对应region变化信息。此外还负责监控处理当前hbase cluster中regionserver状态变化信息。
hbase regionserver则用于多个/单个维护region。
region则对应为hbase数据表的表分区数据维护。

简单的说:ZOOKEEPER是HBASE的调度器,所有CLIENT的访问首先会从ZOOKEEPER拿到一个SESSION
ZK同时负责监控所有REGION SERVER的健康状况~~
如果ZK每三分钟(可以配置)会监控一次REGION SERVER,如果发现某个RS挂了,ZK会通知HMASTER,HMASTER再去拉起那个挂掉的RS

HBase 的写入机制是一个复杂但高效的过程,它涉及多个组件的协同工作以确保数据的可靠性和一致性。以下是 HBase 写入数据的工作原理及流程: 当客户端发起一个写入请求时,首先需要确定目标 RegionServer。这一步骤通过查询 `hbase:meta` 表来完成,该表记录了所有 Region 与 RegionServer 之间的映射关系。客户端使用 `HConnection` 接口中的 `locateRegion` 方法来定位负责特定 rowkey 的 RegionServer [^4]。 一旦找到了正确的 RegionServer,客户端就会将数据发送给它。在 RegionServer 接收到数据后,并不会立即将其写入 HDFS,而是先缓存到内存中的 MemStore 中。MemStore 是每个列族(Column Family)都有一个的结构,用于临时存储新到达的数据 [^5]。 与此同时,为了保证数据的安全性,在向 MemStore 添加数据之前,HBase 还会执行写前日志(Write-Ahead Log, WAL)。这意味着所有的更改都会被记录在一个称为 HLog 文件中,这个文件位于 HDFS 上。如果发生故障导致 MemStore 数据丢失,则可以通过重放 WAL 来恢复这些数据 [^1]。 随着 MemStore 中的数据量增长,当达到一定阈值时,系统会触发 flush 操作,把 MemStore 中的内容持久化为一个新的 StoreFile 并保存至 HDFS。随着时间推移和更多数据的写入,会有更多的 StoreFiles 被创建出来 。 此外,HBase 还实现了 Compaction 机制,用来合并多个小的 StoreFiles 成较大的文件,以此减少磁盘 I/O 并提高读取性能。Compaction 分为 Minor 和 Major 两种类型:Minor Compaction 只合并少量相邻的小文件;而 Major Compaction 则会对整个 Region 内的所有 StoreFiles 进行彻底整合 [^1]。 综上所述,HBase 的写入流程包括以下几个关键步骤: - 定位合适的 RegionServer。 - 将数据写入 WAL 以确保持久性。 - 把数据插入到对应的 MemStore。 - 当 MemStore 达到设定大小时执行 Flush 操作生成新的 StoreFile。 - 定期进行 Compaction 来优化存储效率和查询速度。 ```java // 示例代码 - 使用 Java API 向 HBase 表中插入数据 import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.ConnectionFactory; import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.client.Table; import org.apache.hadoop.hbase.util.Bytes; public class HBaseWriteExample { public static void main(String[] args) throws Exception { // 创建配置对象并设置ZooKeeper相关信息 Configuration config = HBaseConfiguration.create(); config.set("hbase.zookeeper.quorum", "localhost:2181"); // 建立连接 try (Connection connection = ConnectionFactory.createConnection(config); Table table = connection.getTable(TableName.valueOf("my_table"))) { // 准备要插入的数据 Put put = new Put(Bytes.toBytes("row1")); put.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("qualifier"), Bytes.toBytes("value")); // 执行插入操作 table.put(put); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值