【HBase】Apache HBase内核深度剖析( 五 )
本文插图
(RegionServer结构)
一个RegionServer由一个HLog , 一个BlockCache和多个Region组成 , HLog保障数据写入的可靠性 , BlockCache缓存查询的热点数据提升效率 , 每一个Region是HBase中的数据表的一个分片 , 一个RegionServer会承担多个Region的读写 , 而每一个Region又由多个store组成 。 store中存储着列簇的数据 。 例如一个表包含两个列簇的话 , 这个表的所有Region都会包含两个Store , 每个Store又包含Mem和Hfile两部分 , 写入的时候先写入Mem , 根据条件再落盘成Hfile 。
RegionServer管理的HLog的文件格式如下所示:
本文插图
(RegionServer管理HLog架构 , 来自网络)
HLog的日志文件存放在HDFS中 , hbase集群默认会在hdfs上创建hbase文件夹 , 在该文件夹下有一个WAL目录 , 其中存放着所有相关的HLog , HLog并不会永久存在 , 在整个HBase总HLog会经历如下过程:
- HLog构建:任何写入操作都会先记录到HLog , 因此在发生写入操作的时候会先构建HLog 。
- HLog滚动:因为HLog会不断追加 , 所以整个文件会越来越大 , 因此需要支持滚动日志文件存储 , 所以HBase后台每间隔一段时间(默认一小时)会产生一个新的HLog文件 , 历史HLog标记为历史文件 。
- HLog失效:一旦数据进入到磁盘 , 形成HFile后 , HLog中的数据就没有存在必要了 , 因为HFile存储在HDFS中 , HDFS文件系统保障了其可靠性 , 因此当该HLog中的数据都落地成磁盘后 , 该HLog会变为失效状态 , 对应的操作是将该文件从WAL移动到oldWAl目录 , 此时文件依旧存在 , 并未进行删除 。
- HLog删除:hbase有一个后台进程 , 默认每间隔一分钟会对失效日志文件进行判断 , 如果没有任何引用操作 , 那么此时的文件会被彻底的从物理删除 。
HBase怎么用虽然HBase目前使用非常广泛 , 并且默认情况下 , 只要机器配置到位 , 不需要特别多的操作 , HBase就可以满足大部分情况下的海量数据处理 , 再配合第三方工具像phoenix , 可以直接利用HBase构建一套OLAP系统 , 但是我们还是要认识到HBase的客观影响 , 知道其对应的细节差异 , 大概来说如果我们使用HBase , 有以下点需要关心一下:
- 因为HBase在RegionServer对写入的检查机制 , 会导致客户端在符合条件的情况下出现重试的情况 , 所以对于较为频繁的写入操作 , 或者较大数据量的写入操作 , 推荐使用直接产生HFlie然后load到HBase中的方式 , 不建议直接使用HBase的自身的Put API 。
- 从使用来讲如果业务场景导致HBase中存储的列簇对应的数据量差异巨大 , 那么不建议创建过多的列簇 , 因为HBase的存储机制会导致不同列簇的数据存储在同一个HBase的HFile中 , 但是split机制在数据量增加较大的情况下 , 会发生拆分 , 则会导致小数据量的列簇被频繁的split , 反而降低了查询性能 。
- RegionServer是相互独立的 , 所以如果想要让集群更加的稳定高效 , 例如如果想实现RegionServer集群 , 达到信息共享 , 任务增量计算 , 需要自己修改RegionServer的代码 。
- 对于HBase来讲 , 很多场景下 , 像如果Region正在Split , 或者Mem正在Dump , 则无法进行对应的操作 , 此时错误信息会被以异常的形式返回到客户端 , 再由客户端进行重试 , 因此在使用过程中 , 需要结合我们的应用场景 , 考虑如何设置类似于buffer大小的参数 , 以尽可能少的降低因为内部操作引起的客户端重试 , 特别是在使用类似opentsdb的这类集成hhbase的数据的情况下 。
推荐阅读
- 安胜ANSCEN:【E周道】SCUF Gaming泄露110万用户信息 Linux内核漏洞曝光
- 『香港新天域互联』LG G7 ThinQ Android 10内核源代码公布
- 『电子工程世界』技术文章—Arm内核解析
- ■现代ApacheNiFi负载平衡,你了解多少?
- 「UC浏览器」基于chrome内核的微软手机浏览器来了
- [优麒麟]优麒麟20.04 LTS Beta发布 更新Linux 5.4版内核
- 『』华为P40 Pro包装盒曝光,HMS内核已预装,艰难前行为鸿蒙铺路
- 【】AMD 7nm锐龙APU内核玉照首次公开!CPU八核心、GPU八核心
- []新版Windows 10自带Linux内核:可Update更新 像安装驱动一样方便
- 『』三星开源Galaxy S20系列内核源代码:定制ROM的必需品