Hbase架构与读写

Hbase架构图

client

  • Client包含了访问HBase的接口

  • 维护对应的cache加速HBase的访问,比如caceh的.META元数据信息

zookeeper

  • 实现HMaster的高可用

  • 保存了hbase的元数据信息,是所有的hbase表的寻址入口

  • 对HMaster和HRegionServer实现了监控

HMaster

  • 负责启动的时候分配Region到具体的RegionServer,执行行各种管理操作,比如Region的分割和合并。

  • 维护整个集群的负载均衡

  • 维护集群的元数据信息

  • 发现失效的Region,并将Region分配到正常的HRegionServer上

注:当HMatser宕机后,Hbase仍然可以进行数据的读取和写入,因为读取需要的元数据表hbase:meta的位置存储Zookeeper上,但要进行创建表,修改列族配置以及分割和合并需要HMaster的操作

HRegionServer

  • 负责管理Region.HRegionServer上有一个或者多个Region,我们读写的数据就存储在Region上。

  • 接受client的读写请求。

  • 切分运行过程中变大的Region

HLog

  • 预写日志(Write-ahead log,WAL),预先写入。当操作到达Region的时候,HBase会先把操作写入到WAL里面。HBase会先把数据放到基于内存实现的Memstore里,等数据达到一定的数量时才刷写到最终存储的HFile内。如果此时服务器宕机,内存数据丢失。WAL就可以用于数据恢复。

  • 如果你学过 Hadoop 中的 Shuffle(edits文件) 机制的就可以猜测到 HBase 中的 WAL 也是一个滚动的日志数据结构,一个WAL实例包含多个WAL文件,WAL被触发滚动的条件如下

Region

  • 表的一部分数据。HBase是一个会自动分片的数据库。一个Region就相当于关系型数据库中分区表中的一个分区,或者Redis中的一个分片。

  • 一个Region中包含多个store

  • 每个region都有起始的rowKey和结束的rowKey,代表了它锁存储row范围。

store

  • 一个store存储一个列族,一个列族的列是存储在一起的,可以一次取出来。

memstore

  • 一个sotre里面只有一个memstore

  • 每个 Store 都有一个 MemStore 实例,数据写入到 WAL 之后就会被放入 MemStore 中。MemStore是内存的存储对象,当 MemStore 的大小达到一个阀值(默认64MB)时,MemStore 会被 flush到文件,即生成一个快照。目前HBase 会有一个线程来负责MemStore 的flush操作

HFile

  • 在store中有多个HFile,当memstore 满了之后HBase就会在HDFS上生成了一个新的HFile,然后MemStore中的内容写到这个HFile中,然后将数据落到HDFS上。

 HBase读写数据流程

 

HBase物理存储原理 与LSM-Tree算法

 HBase物理存储原理 与LSM-Tree算法_sunnygod的博客-CSDN博客

Block Cache

HBase 在实现中提供了两种缓存结构 MemStore(写缓存) 和 BlockCache(读缓存)。写缓存前面说过不再重复。

  1. HBase 会将一次文件查找的 Block块 缓存到 Cache中,以便后续同一请求或者邻近数据查找请求,可以直接从内存中获取,避免昂贵的IO操作。
  2. BlockCache是Region Server级别的,
  3. 一个Region Server只有一个Block Cache,在 Region Server 启动的时候完成 Block Cache 的初始化工作。

HBase 为什么写比读快

  1. HBase 能提供实时计算服务主要原因是由其架构和底层的数据结构决定的,即由LSM-Tree(Log-Structured Merge-Tree) + HTable(Region分区) + Cache决定的。
  2. HBase 写入速度快是因为数据并不是真的立即落盘,而是先写入内存,随后异步刷入HFile。所以在客户端看来,写入速度很快。
  3. HBase 存储到内存中的数据是有序的,内存数据刷写到HFile时也是有序的。并且多个有序的HFile还会进行归并排序生成更大的有序HFile。性能测试发现顺序读写磁盘速度比随机读写磁盘快至少三个数量级!
  4. 读取速度快是因为它使用了LSM树型结构,因为磁盘寻址耗时远远大于磁盘顺序读取的时间,HBase的架构设计导致我们可以将磁盘寻址次数控制在性能允许范围内。
  5. LSM 树原理把一棵大树拆分成N棵小树,它首先写入内存中,随着小树越来越大,内存中的小树会flush到磁盘中,磁盘中的树定期可以做merge操作来合并成一棵大树,以优化读性能。

举例

  1. 根据RowKey能快速找到行所在的Region,假设有10亿条记录,占空间1TB。分列成了500个Region,那读取2G的记录,就能找到对应记录。
  2. 数据是按照列族存储的,假设分为3个列族,每个列族就是666M, 如果要查询的东西在其中1个列族上,1个列族包含1个或者多个 HStoreFile,假设一个HStoreFile是128M, 该列族包含5个HStoreFile在磁盘上. 剩下的在内存中。
  3. 内存跟磁盘中数据是排好序的,你要的记录有可能在最前面,也有可能在最后面,假设在中间,我们只需遍历2.5个HStoreFile共300M。
  4. 每个HStoreFile(HFile的封装),是以键值对(KV)方式存储,只要遍历一个个数据块中的key的位置,并判断符合条件可以了。一般key是有限的长度,假设KV比是1:19,最终只需要15M就可获取的对应的记录,按照磁盘的访问100M/S,只需0.15秒。加上Block Cache 会取得更高的效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值