ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

HBase深入----读写流程

2021-11-05 15:03:09  阅读:184  来源: 互联网

标签:Region ---- regionserver META region HBase 数据 读写 HFile


写流程

在这里插入图片描述

  1. 客户端从ZK获取到存放.META.表的regionserver。
  2. 客户端从对应的regionserver上获取.META.表的信息。并从获取的信息中,找到写数据对应的regionserver,也就是put请求发送到哪台regionserver上。
  3. 客户端找到对应的regionserver,先将对数据的操作写入到HLog中,做预写日志。
  4. 再去region中,将数据写入到MemStore中,这个时候RegionServer就会给客户端返回ack,当MemStore中的数据到达阈值时,就将它的数据写入到缓冲队列,由缓冲队列写入到HFile中。
  5. HFile会将小文件进行合并,防止文件存放到HDFS上时,namenode上的元数据过于臃肿。它也会将过大的文件进行拆分。

读流程

	.META.:存放region信息,表的名字,rowkey的范围,region在哪个regionserver

	-ROOT-:存放的是.META.表的信息
  1. 客户端从zk获取.META.表所在的regionserver。
    0.98之前,.META.的相关信息存放在-ROOT-表中,-ROOT-表存放的位置信息放在ZK中。
    0.98之后,没有-ROOT-表了,ZK中直接存放.META.表所在的位置信息。
  2. 去对应的regionserver读取.META.表,获取region所在信息(region在哪个regionserver上保存的信息)。
  3. 客户端到了regionserver时,先找到region,先去在Block Cache(读缓存)中读取数据,如果读取到了数据就返回。
    BlockCache是读缓冲,BlockCache中存放的是客户端最近读取的数据,使用LRU(最近最少使用)算法,它会定期删除里面的数据,先删除访问频率少的数据,如果访问频率一样,那就删除先进来的数据。
  4. 如果在Block Cache中没读取到数据,就去MemStore 和 Store File(HFile)中查询目标数据,并将Store File中的数据先写入Block Cache,将Block Cache和MemStore中查到的所有数据进行合并,返回时间戳最大的数据。此处所有数据是指同一条数据的不同版本(time stamp)或者不同的类型(Put/Delete)。
  5. 将从文件中查询到的数据块(Block,HFile 数据存储单元,默认大小为 64KB)缓存到Block Cache。
  6. 将合并后的最终结果返回给客户端。

StoreFile Compaction

  • 由于memstore每次刷写都会生成一个新的HFile,且同一个字段的不同版本(timestamp)
    和不同类型(Put/Delete)有可能会分布在不同的 HFile 中,因此查询时需要遍历所有的 HFile。为了减少 HFile 的个数,以及清理掉过期和删除的数据,会进行 StoreFile Compaction。
  • Compaction 分为两种,分别是 Minor Compaction 和Major Compaction。Minor Compaction会将临近的若干个较小的 HFile 合并成一个较大的 HFile,但不会清理过期和删除的数据。Major Compaction 会将一个 Store 下的所有的 HFile 合并成一个大 HFile,并且会清理掉过期和删除的数据。
  • 当文件数超过三个时,手动Compact和Major Compact实现的效果是一样的。
    在这里插入图片描述

Region Split

  • 默认情况下,每个 Table 起初只有一个 Region,随着数据的不断写入,Region 会自动进行拆分。刚拆分时,两个子 Region 都位于当前的 Region Server,但处于负载均衡的考虑,HMaster 有可能会将某个 Region 转移给其他的 Region Server。
  • Region Split 时机:
    1. 当1个region中的某个Store下所有StoreFile的总大小超过hbase.hregion.max.filesize, 该 Region 就会进行拆分(0.94 版本之前)。默认是10G。
    2. 当 1 个 region 中 的 某 个 Store 下所有 StoreFile 的 总 大 小 超 过 Min(R^2 * “hbase.hregion.memstore.flush.size”,hbase.hregion.max.filesize"),该 Region 就会进行拆分,其中 R 为当前 Region Server 中属于该 Table 的个数(0.94 版本之后)。
      hbase.hregion.memstore.flush.size默认是128M。
      hbase.hregion.max.filesize默认是10G。
      R是当前这个表有多少region。

标签:Region,----,regionserver,META,region,HBase,数据,读写,HFile
来源: https://blog.csdn.net/qq_25084029/article/details/121162929

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有