大家好,我是考100分的小小码 ,祝大家学习进步,加薪顺利呀。今天说一说聊一聊 HBase 是如何写入数据的?「建议收藏」,希望您对编程的造诣更进一步.
hi,大家好,我是大D。今天继续了解下 HBase 是如何写入数据的,然后再讲解一下一个比较经典的面试题。
Region Server 寻址
- HBase Client 访问 ZooKeeper;
- 获取写入 Region 所在的位置,即获取 hbase:meta 表位于哪个 Region Server;
- 访问对应的 Region Server;
- 获取 hbase:meta 表,并查询出目标数据位于哪个 Region Server 中的哪个 Region 中。并将该 table 的 Region 信息以及 meta 表的位置信息缓存在客户端的 meta cache,方便下次访问;
写 Hlog
- HBase Client 向 Region Server 发送写 Hlog 请求;
- Region Server 会通过顺序写入磁盘的方式,将 Hlog 存储在 HDFS 上;
写 MemStore 并返回结果
- HBase Client 向 Region Server 发送写 MemStore 请求;
- 只有当写 Hlog 和写 MemStore 的请求都成功完成之后,并将反馈给 HBase Client,这时对于整个 HBase Client 写入流程已经完成。
MemStore 刷盘
HBase 会根据 MemStore 配置的刷盘策略定时将数据刷新到 StoreFile 中,完成数据持久化存储。
为什么要把 WAL 加载到 MemStore中,再刷写成 HFile 呢?
WAL (Write-Ahead-Log) 预写日志是 HBase 的 RegionServer 在处理数据插入和删除过程中用来记录操作内容的一种日志。每次Put、Delete等一条记录时,首先将其数据写入到 RegionServer 对应的 HLog 文件中去。
而WAL是保存在HDFS上的持久化文件,数据到达 Region 时先写入 WAL,然后被加载到 MemStore 中。这样就算Region宕机了,操作没来得及执行持久化,也可以再重启的时候从 WAL 加载操作并执行。
那么,我们从写入流程中可以看出,数据进入 HFile 之前就已经被持久化到 WAL了,而 WAL 就是在 HDFS 上的,MemStore 是在内存中的,增加 MemStore 并不能提高写入性能,为什么还要从 WAL 加载到 MemStore中,再刷写成 HFile 呢?
- 数据需要顺序写入,但 HDFS 是不支持对数据进行修改的;
- WAL 的持久化为了保证数据的安全性,是无序的;
- Memstore在内存中维持数据按照row key顺序排列,从而顺序写入磁盘;
所以 MemStore 的意义在于维持数据按照RowKey的字典序排列,而不是做一个缓存提高写入效率。
另外,非常欢迎大家加我VX: Abox_0226 ,备注「进群」,有关大数据技术的问题在群里一起探讨。
原文地址:https://www.cnblogs.com/datadance/archive/2022/05/18/16284653.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/5249.html