加入收藏 | 设为首页 | 会员中心 | 我要投稿 南通站长网 (https://www.0513zz.cn/)- 专有云、图像技术、经验、数据治理、专属主机!
当前位置: 首页 > 站长资讯 > 评论 > 正文

“大数据”行业风口来临

发布时间:2021-01-28 16:29:45 所属栏目:评论 来源:互联网
导读:Client 先访问 zookeeper,访问 /hbase/meta-region-server 获取 hbase:meta 表位于哪个 Region Server。 访问对应的 Region Server,获取 hbase:meta 表,根据读请求的 namespace:table/rowkey,查询出目标数据位于哪个 Region Server 中的哪个 Region 中。
  1. Client 先访问 zookeeper,访问 /hbase/meta-region-server 获取 hbase:meta 表位于哪个 Region Server。
  2. 访问对应的 Region Server,获取 hbase:meta 表,根据读请求的 namespace:table/rowkey,查询出目标数据位于哪个 Region Server 中的哪个 Region 中。并将该 table 的 Region 信息以及 meta 表的位置信息缓存在客户端的 meta cache,方便下次访问。
  3. 与目标 Region Server 进行通讯。
  4. 将数据顺序写入(追加)到 WAL。
  5. 将数据写入对应的 MemStore,数据会在 MemStore 进行排序。
  6. 向客户端发送 ack,此处可看到数据不是必须落盘的。
  7. 等达到 MemStore 的刷写时机后,将数据刷写到 HFile
  8. 在web页面查看的时候会随机的给每一个Region生成一个随机编号。

4.2 HBase 读流程
 

3.5 WAL

WAL (Write-Ahead-Log) 预写日志是 HBase 的 RegionServer 在处理数据插入和删除的过程中用来记录操作内容的一种日志。每次Put、Delete等一条记录时,首先将其数据写入到 RegionServer 对应的HLog文件中去。只有当WAL日志写入成功的时候,客户端才会被告诉提交数据成功。如果写WAL失败会告知客户端提交失败,这其实就是数据落地的过程。

WAL是保存在HDFS上的持久化文件。数据到达 Region 时先写入WAL,然后被加载到MemStore中。这样就算Region宕机了,操作没来得及执行持久化,也可以再重启的时候从WAL加载操作并执行。跟Redis的AOF类似。

  1. 在一个 RegionServer 上的所有 Region 都共享一个 HLog,一次数据的提交先写入WAL,写入成功后,再写入MenStore之中。当MenStore的值达到一定的时候,就会形成一个个StoreFile。
  2. WAL 默认是开启 的,也可以手动关闭它,这样增删改操作会快一点。但是这样做牺牲的是数据的安全性。如果不想关闭WAL,又不想每次都耗费那么大的资源,每次改动都调用HDFS客户端,可以选择异步的方式写入WAL(默认间隔1秒写入)
  3. 如果你学过 Hadoop 中的 Shuffle(edits文件) 机制的就可以猜测到 HBase 中的 WAL 也是一个滚动的日志数据结构,一个WAL实例包含多个WAL文件,WAL被触发滚动的条件如下。
  • WAL的大小超过了一定的阈值。
  • WAL文件所在的HDFS文件块快要满了。
  • WAL归档和删除。

3.5 Region

每一个 Region 都有起始 RowKey 和结束 RowKey,代表了存储的Row的范围。从大图中可知一个Region有多个Store,一个Store就是对应一个列族的数据,Store 由 MemStore 和 HFile 组成的。

3.6 Store

Store 由 MemStore 跟 HFile 两个重要的部分。

3.6.1 MemStore

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

3.6.2 StoreFile

MemStore 内存中的数据写到文件后就是StoreFile,StoreFile底层是以 HFile 的格式保存。HBase以Store的大小来判断是否需要切分Region。

3.6.3 HFile

在Store中有多个HFile,每次刷写都会形成一个HFile文件落盘在HDFS上。HFile文件也会动态合并,它是数据存储的实体。

这里提出一点疑问:操作到达Region时,数据进入HFile之前就已经被持久化到WAL了,而WAL就是在HDFS上的,为什么还要从WAL加载到MemStore中,再刷写成HFile呢?

由于HDFS支持文件创建、追加、删除,但不能修改!但对数据库来说,数据的顺序非常重要!

第一次WAL的持久化是为了保证数据的安全性,无序的。

再读取到MemStore中,是为了排序后存储。

所以MemStore的意义在于维持数据按照RowKey的字典序排列,而不是做一个缓存提高写入效率。

3.7 HDFS

HDFS 为 HBase 提供最终的底层数据存储服务,HBase 底层用HFile格式 (跟hadoop底层的数据存储格式类似) 将数据存储到HDFS中,同时为HBase提供高可用(Hlog存储在HDFS)的支持,具体功能概括如下:

提供元数据和表数据的底层分布式存储服务

数据多副本,保证的高可靠和高可用性

4 HBase 读写

在HBase集群中如果我们做 DML 操作是不需要关心 HMaster 的,只需要从 ZooKeeper 中获得hbase:meta 数据地址,然后从RegionServer中增删查数据即可。

4.1 HBase 写流程

(编辑:南通站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读